diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index cf61609b7..71d15fddd 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -992,7 +992,7 @@ LLAudioData * LLAudioEngine::getAudioData(const LLUUID &audio_uuid)
delete sourcep;
if(chan)
chan->cleanup();
- mAllSources.erase(iter2++);
+ mAllSources.erase(iter2++);
}
else
++iter2;
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 7fb9a8ab8..8a4ede86e 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -435,7 +435,6 @@ S32 LLQueuedThread::processNextRequest()
{
lockData();
req->setStatus(STATUS_COMPLETE);
-
req->finishRequest(true);
diff --git a/indra/llimage/llimagepng.cpp b/indra/llimage/llimagepng.cpp
index 2518dbe8f..4dedeca6c 100644
--- a/indra/llimage/llimagepng.cpp
+++ b/indra/llimage/llimagepng.cpp
@@ -117,7 +117,6 @@ BOOL LLImagePNG::encode(const LLImageRaw* raw_image, F32 encode_time)
setSize(raw_image->getWidth(), raw_image->getHeight(), raw_image->getComponents());
U32 bufferSize = getWidth() * getHeight() * getComponents() + 1024;
-
//New implementation
allocateData(bufferSize); //Set to largest possible size.
if(isBufferInvalid()) //Checking
@@ -125,15 +124,13 @@ BOOL LLImagePNG::encode(const LLImageRaw* raw_image, F32 encode_time)
setLastError("LLImagePNG::encode failed allocateData");
return FALSE;
}
-
- // Delegate actual encoding work to wrapper
+ // Delegate actual encoding work to wrapper
LLPngWrapper pngWrapper;
if (! pngWrapper.writePng(raw_image, getData()))
{
setLastError(pngWrapper.getErrorMessage());
- return FALSE;
- }
-
+ return FALSE;
+ }
// Resize internal buffer.
if(!reallocateData(pngWrapper.getFinalSize())) //Shrink. Returns NULL on failure.
{
@@ -141,9 +138,7 @@ BOOL LLImagePNG::encode(const LLImageRaw* raw_image, F32 encode_time)
return FALSE;
}
return TRUE;
-
-
- /*U8* mTmpWriteBuffer = new U8[ bufferSize ];
+ /*U8* mTmpWriteBuffer = new U8[ bufferSize ];
// Delegate actual encoding work to wrapper
LLPngWrapper pngWrapper;
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 6c2e20577..e383fa293 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1564,9 +1564,10 @@ void LLImageGL::setNoDelete()
void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)
{
delete [] mPickMask; //Always happens regardless.
+
mPickMask = NULL;
+
mPickMaskSize = 0;
-
if (!(mFormatType != GL_UNSIGNED_BYTE ||
mFormatPrimary != GL_RGBA)) //can only generate a pick mask for this sort of texture
{
@@ -1582,7 +1583,6 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)
memset(mPickMask, 0, sizeof(U8) * mPickMaskSize);
U32 pick_bit = 0;
-
for (S32 y = 0; y < height; y += 2)
{
for (S32 x = 0; x < width; x += 2)
@@ -1600,7 +1600,7 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)
mPickMask[pick_idx] |= 1 << pick_offset;
}
-
+
++pick_bit;
}
}
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index c32b962c5..6a670f2e5 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -298,7 +298,7 @@ bool LLTexUnit::bindManual(eTextureType type, U32 texture, bool hasMips)
if(mCurrTexture != texture)
{
gGL.flush();
-
+
activate();
enable(type);
mCurrTexture = texture;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 462d6e989..2450d2a35 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -64,6 +64,7 @@ include_directories(
)
set(viewer_SOURCE_FILES
+ ascentdaycyclemanager.cpp
ascentfloatercontactgroups.cpp
ascentprefssys.cpp
ascentprefsvan.cpp
@@ -513,6 +514,7 @@ endif (LINUX)
set(viewer_HEADER_FILES
CMakeLists.txt
ViewerInstall.cmake
+ ascentdaycyclemanager.h
ascentfloatercontactgroups.h
ascentprefssys.h
ascentprefsvan.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 94522621e..8f380563d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -817,16 +817,17 @@
Value
0
- AscentUploadFolder
+ AscentUploadSettings
AscentUseCustomTag
@@ -866,6 +867,17 @@
Value
Custom
+ AscentActiveDayCycle
+
+ Comment
+ Day cycle currently in use
+ Persist
+ 1
+ Type
+ String
+ Value
+ Default
+
AscentAutoCloseOOC
Comment
diff --git a/indra/newview/app_settings/windlight/days/Default.xml b/indra/newview/app_settings/windlight/days/Default.xml
index d3d7ece7e..3d3afd507 100644
--- a/indra/newview/app_settings/windlight/days/Default.xml
+++ b/indra/newview/app_settings/windlight/days/Default.xml
@@ -1,36 +1,36 @@
-
-
-
- 0
- A-12AM
-
-
- 0.125
- A-3AM
-
-
- 0.25
- A-6AM
-
-
- 0.375
- A-9AM
-
-
- 0.5
- A-12PM
-
-
- 0.625
- A-3PM
-
-
- 0.75
- A-6PM
-
-
- 0.875
- A-9PM
-
-
-
+
+
+
+ 0
+ A-12AM
+
+
+ 0.125
+ A-3AM
+
+
+ 0.25
+ A-6AM
+
+
+ 0.375
+ A-9AM
+
+
+ 0.5
+ A-12PM
+
+
+ 0.625
+ A-3PM
+
+
+ 0.75
+ A-6PM
+
+
+ 0.875
+ A-9PM
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Happy%20Bivouac.xml b/indra/newview/app_settings/windlight/days/Happy%20Bivouac.xml
new file mode 100644
index 000000000..2fa7178d3
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Happy%20Bivouac.xml
@@ -0,0 +1,44 @@
+
+
+
+ 0
+ E-12am
+
+
+ 0.125
+ E-3am
+
+
+ 0.1666666716337204
+ E-4am
+
+
+ 0.25
+ E-6am
+
+
+ 0.375
+ E-9am
+
+
+ 0.5
+ E-12pm
+
+
+ 0.625
+ E-3pm
+
+
+ 0.75
+ E-6pm
+
+
+ 0.79166668653488159
+ E-7pm
+
+
+ 0.875
+ E-9pm
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D12am.xml b/indra/newview/app_settings/windlight/skies/E%2D12am.xml
new file mode 100644
index 000000000..8fcf8bf5b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D12am.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.26999998092651367
+ 0.32999998331069946
+ 0.32999998331069946
+
+ blue_density
+
+ 0.56341457366943359
+ 0.65999996662139893
+ 0.5473170280456543
+ 0.32999998331069946
+
+ blue_horizon
+
+ 0.099999994039535522
+ 0.14000000059604645
+ 0.15999999642372131
+ 0.15999999642372131
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.31999999284744263
+ 0.34000000357627869
+ 0.34000000357627869
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.069999694824219
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.11999999731779099
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 7.9999997979030013e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 27
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 1.7999999523162842
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.20999999344348907
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.99992102384567261
+ -0.012566247954964638
+ 1
+
+ max_y
+
+ 906.19991350494092
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 1.9999994039535522
+ sun_angle
+ 4.7249555587768555
+ sunlight_color
+
+ 0.14999999105930328
+ 0.21000000834465027
+ 0.26999998092651367
+ 0.26999998092651367
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D12pm.xml b/indra/newview/app_settings/windlight/skies/E%2D12pm.xml
new file mode 100644
index 000000000..eb41debe9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D12pm.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.0799999237060547
+ 1.0660644769668579
+ 0.89999997615814209
+ 0.35999998450279236
+
+ blue_density
+
+ 0.2800000011920929
+ 0.39393550157546997
+ 0.47999998927116394
+ 0.47999998927116394
+
+ blue_horizon
+
+ 0.41999998688697815
+ 0.62000000476837158
+ 1.0399999618530273
+ 1.0399999618530273
+
+ cloud_color
+
+ 0.31000000238418579
+ 0.31000000238418579
+ 0.31000000238418579
+ 0.31000000238418579
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.11999999731779099
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 7.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 12.600000381469727
+ 0.0010000000474974513
+ -0.64999997615814209
+ 1
+
+ haze_density
+
+ 1.9099999666213989
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.25999999046325684
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.99950653314590454
+ -0.031410936266183853
+ 0
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0
+ sun_angle
+ 1.6022124290466309
+ sunlight_color
+
+ 0.77586203813552856
+ 0.89999997615814209
+ 0.84000003337860107
+ 0.89999997615814209
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D3am.xml b/indra/newview/app_settings/windlight/skies/E%2D3am.xml
new file mode 100644
index 000000000..f05c4306f
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D3am.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.26999998092651367
+ 0.32999998331069946
+ 0.32999998331069946
+
+ blue_density
+
+ 0.56000000238418579
+ 0.65999996662139893
+ 0.53999996185302734
+ 0.65999996662139893
+
+ blue_horizon
+
+ 0.099999994039535522
+ 0.14000000059604645
+ 0.15999999642372131
+ 0.15999999642372131
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.31999999284744263
+ 0.34000000357627869
+ 0.34000000357627869
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.069999694824219
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026000000070780516
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 1.4599999189376831
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.20999999344348907
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.84767758846282959
+ -0.53051173686981201
+ 1
+
+ max_y
+
+ 1074
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 1.9999994039535522
+ sun_angle
+ 5.2715930938720703
+ sunlight_color
+
+ 0.14999999105930328
+ 0.21000000834465027
+ 0.26999998092651367
+ 0.26999998092651367
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D3pm.xml b/indra/newview/app_settings/windlight/skies/E%2D3pm.xml
new file mode 100644
index 000000000..d6e408c05
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D3pm.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.2571429014205933
+ 1.3199999332427979
+ 1.0057142972946167
+ 0.43999999761581421
+
+ blue_density
+
+ 0.20495410263538361
+ 0.56451046466827393
+ 0.69999998807907104
+ 0.34999999403953552
+
+ blue_horizon
+
+ 0.39999997615814209
+ 0.6721307635307312
+ 1
+ 0.5
+
+ cloud_color
+
+ 0.53962135314941406
+ 0.53962135314941406
+ 0.53962135314941406
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.10999999195337296
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.08999999612569809
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00016999999934341758
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 5.3000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.91999995708465576
+ 0
+ 0
+ 1
+
+ glow
+
+ 10.799999237060547
+ 0.0010000000474974513
+ -0.64999997615814209
+ 1
+
+ haze_density
+
+ 1.9099999666213989
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.25999999046325684
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.85099434852600098
+ -0.52517479658126831
+ 0
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0
+ sun_angle
+ 2.1237168312072754
+ sunlight_color
+
+ 0.66705864667892456
+ 0.80999994277954102
+ 0.64323520660400391
+ 0.26999998092651367
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D4am.xml b/indra/newview/app_settings/windlight/skies/E%2D4am.xml
new file mode 100644
index 000000000..30935d114
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D4am.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.26999998092651367
+ 0.32999998331069946
+ 0.32999998331069946
+
+ blue_density
+
+ 0.58048778772354126
+ 0.68000000715255737
+ 0.56390243768692017
+ 0.34000000357627869
+
+ blue_horizon
+
+ 0.099999994039535522
+ 0.14000000059604645
+ 0.15999999642372131
+ 0.15999999642372131
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.31999999284744263
+ 0.34000000357627869
+ 0.34000000357627869
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.069999694824219
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026000000070780516
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 1.4599999189376831
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.22999998927116394
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.65658539533615112
+ -0.75425165891647339
+ 1
+
+ max_y
+
+ 1074
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 1.9999994039535522
+ sun_angle
+ 5.5669026374816895
+ sunlight_color
+
+ 0.14999999105930328
+ 0.23999999463558197
+ 0.26999998092651367
+ 0.26999998092651367
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D6am.xml b/indra/newview/app_settings/windlight/skies/E%2D6am.xml
new file mode 100644
index 000000000..c73bae805
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D6am.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.95999997854232788
+ 0.74666666984558105
+ 0.39111104607582092
+ 0.31999999284744263
+
+ blue_density
+
+ 0.35999998450279236
+ 0.49999505281448364
+ 1
+ 1
+
+ blue_horizon
+
+ 0
+ 0.60923081636428833
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.41999998688697815
+ 0.41999998688697815
+ 0.41999998688697815
+ 0.41999998688697815
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 19.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.81000000238418579
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -1.5999999046325684
+ 1
+
+ haze_density
+
+ 2.3199999332427979
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.38999998569488525
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0.12533323466777802
+ 0.99211472272872925
+ 0
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0.2199999988079071
+ sun_angle
+ 0.12566371262073517
+ sunlight_color
+
+ 1.8300000429153442
+ 1.0707448720932007
+ 0.61773747205734253
+ 0.61000001430511475
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D6pm.xml b/indra/newview/app_settings/windlight/skies/E%2D6pm.xml
new file mode 100644
index 000000000..8d1dc5934
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D6pm.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.65999996662139893
+ 0.65999996662139893
+ 0.50999999046325684
+ 0.2199999988079071
+
+ blue_density
+
+ 0.18153078854084015
+ 0.49999505281448364
+ 0.65999996662139893
+ 0.65999996662139893
+
+ blue_horizon
+
+ 0.43070217967033386
+ 0.85394656658172607
+ 1.0399999618530273
+ 1.0399999618530273
+
+ cloud_color
+
+ 0.34000000357627869
+ 0.34000000357627869
+ 0.34000000357627869
+ 0.34000000357627869
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10
+
+ cloud_shadow
+
+ 0.10999999940395355
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00016999999934341758
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 5.3000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0499999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.19999885559082
+ 0.0010000000474974513
+ -0.44999998807907104
+ 1
+
+ haze_density
+
+ 1.8499999046325684
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.35999998450279236
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.70264989137649536
+ -0.7115357518196106
+ 0
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0.08999999612569809
+ sun_angle
+ 2.3624777793884277
+ sunlight_color
+
+ 0.84000003337860107
+ 0.87000000476837158
+ 0.80999994277954102
+ 0.87000000476837158
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D7pm.xml b/indra/newview/app_settings/windlight/skies/E%2D7pm.xml
new file mode 100644
index 000000000..bdd67db63
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D7pm.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.53999996185302734
+ 0.36947363615036011
+ 0.22736841440200806
+ 0.17999999225139618
+
+ blue_density
+
+ 0.22608692944049835
+ 0.59193676710128784
+ 1.0399999618530273
+ 0.51999998092651367
+
+ blue_horizon
+
+ 0.63999998569488525
+ 1.1399999856948853
+ 1.2799999713897705
+ 0.63999998569488525
+
+ cloud_color
+
+ 0.31000000238418579
+ 0.31000000238418579
+ 0.31000000238418579
+ 0.31000000238418579
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.23444875962174549
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10.002444075434141
+
+ cloud_shadow
+
+ 0.10999999940395355
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00019999999494757503
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 5.3000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0799999237060547
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -1.4499999284744263
+ 1
+
+ haze_density
+
+ 1.8399999141693115
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.55000001192092896
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.2729516327381134
+ -0.96202772855758667
+ 0
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0.17000000178813934
+ sun_angle
+ 2.8651328086853027
+ sunlight_color
+
+ 1.1100000143051147
+ 0.7580488920211792
+ 0.54146337509155273
+ 0.37000000476837158
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D9am.xml b/indra/newview/app_settings/windlight/skies/E%2D9am.xml
new file mode 100644
index 000000000..76b3301d7
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D9am.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.44785711169242859
+ 0.56999999284744263
+ 0.44785711169242859
+ 0.18999999761581421
+
+ blue_density
+
+ 0.2800000011920929
+ 0.37999999523162842
+ 0.53999996185302734
+ 0.53999996185302734
+
+ blue_horizon
+
+ 0.35999998450279236
+ 0.85394656658172607
+ 1.1000000238418579
+ 1.1000000238418579
+
+ cloud_color
+
+ 0.53962135314941406
+ 0.53962135314941406
+ 0.53962135314941406
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00019999999494757503
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.6000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.81000000238418579
+ 0
+ 0
+ 1
+
+ glow
+
+ 14.800000190734863
+ 0.0010000000474974513
+ -0.34999999403953552
+ 1
+
+ haze_density
+
+ 1.9099999666213989
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.49740666151046753
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0.80156701803207397
+ 0.59790498018264771
+ 0
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0
+ sun_angle
+ 0.92991143465042114
+ sunlight_color
+
+ 0.84000003337860107
+ 0.77538466453552246
+ 0.68999993801116943
+ 0.2800000011920929
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/E%2D9pm.xml b/indra/newview/app_settings/windlight/skies/E%2D9pm.xml
new file mode 100644
index 000000000..d5cb7c5cf
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/E%2D9pm.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.29999998211860657
+ 0.32999998331069946
+ 0.32999998331069946
+
+ blue_density
+
+ 0.25999999046325684
+ 0.53999996185302734
+ 0.65999996662139893
+ 0.65999996662139893
+
+ blue_horizon
+
+ 0.11000000685453415
+ 0.13999997079372406
+ 0.15999999642372131
+ 0.079999998211860657
+
+ cloud_color
+
+ 0.25
+ 0.25
+ 0.25
+ 0.25
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.69569224119186401
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.10999999195337296
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.139999389648437
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.11999999731779099
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00016999999934341758
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 5.3000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.87999999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -0.74999994039535522
+ 1
+
+ haze_density
+
+ 1.75
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.34000000357627869
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0.7862887978553772
+ 0.6178591251373291
+ 1
+
+ max_y
+
+ 600
+ 0
+ 0
+ 1
+
+ preset_num
+ 10
+ star_brightness
+ 0.35999998450279236
+ sun_angle
+ 4.0463719367980957
+ sunlight_color
+
+ 0.14538462460041046
+ 0.20769229531288147
+ 0.26999998092651367
+ 0.08999999612569809
+
+
+
diff --git a/indra/newview/ascentdaycyclemanager.cpp b/indra/newview/ascentdaycyclemanager.cpp
new file mode 100644
index 000000000..b83168f64
--- /dev/null
+++ b/indra/newview/ascentdaycyclemanager.cpp
@@ -0,0 +1,378 @@
+/**
+ * @file ascentdaycyclemanager.cpp
+ * @Author Duncan Garrett
+ * Manager for Windlight Daycycles so we can actually save more than one
+ *
+ * Created August 27 2010
+ *
+ * ALL SOURCE CODE IS PROVIDED "AS IS." THE CREATOR MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * k ilu bye
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "ascentdaycyclemanager.h"
+
+#include "pipeline.h"
+#include "llsky.h"
+
+#include "llsliderctrl.h"
+#include "llspinctrl.h"
+#include "llcheckboxctrl.h"
+#include "lluictrlfactory.h"
+#include "llviewercamera.h"
+#include "llcombobox.h"
+#include "lllineeditor.h"
+#include "llsdserialize.h"
+
+#include "v4math.h"
+#include "llviewerdisplay.h"
+#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "lldrawpoolwater.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+
+#include "llwldaycycle.h"
+#include "llfloaterwindlight.h"
+#include "llfloaterdaycycle.h"
+#include "llfloaterenvsettings.h"
+
+#include "curl/curl.h"
+
+AscentDayCycleManager * AscentDayCycleManager::sInstance = NULL;
+
+AscentDayCycleManager::AscentDayCycleManager()
+{
+}
+
+AscentDayCycleManager::~AscentDayCycleManager()
+{
+}
+
+void AscentDayCycleManager::loadPresets(const std::string& file_name)
+{
+ std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", ""));
+ LL_INFOS2("AppInit", "Shaders") << "Loading Default Day Cycle preset from " << path_name << LL_ENDL;
+
+ bool found = true;
+ while(found)
+ {
+ std::string name;
+ found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
+ if(found)
+ {
+
+ name=name.erase(name.length()-4);
+
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_unescape(name.c_str(), name.size());
+ std::string unescaped_name(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
+ loadPreset(unescaped_name,FALSE);
+ }
+ }
+
+ // And repeat for user presets, note the user presets will modify any system presets already loaded
+
+ std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", ""));
+ LL_INFOS2("AppInit", "Shaders") << "Loading User Daycycle preset from " << path_name2 << LL_ENDL;
+
+ found = true;
+ while(found)
+ {
+ std::string name;
+ found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
+ if(found)
+ {
+ name=name.erase(name.length()-4);
+
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_unescape(name.c_str(), name.size());
+ std::string unescaped_name(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
+ loadPreset(unescaped_name,FALSE);
+ }
+ }
+
+}
+
+void AscentDayCycleManager::savePresets(const std::string & fileName)
+{
+ //Nobody currently calls me, but if they did, then its reasonable to write the data out to the user's folder
+ //and not over the RO system wide version.
+
+ LLSD paramsData(LLSD::emptyMap());
+
+ std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", fileName));
+
+ /*for(std::map::iterator mIt = mParamList.begin();
+ mIt != mParamList.end();
+ ++mIt)
+ {
+ paramsData[mIt->first] = mIt->second.getAll();
+ }*/
+
+ llofstream presetsXML(pathName);
+
+ LLPointer formatter = new LLSDXMLFormatter();
+
+ formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
+
+ presetsXML.close();
+}
+
+void AscentDayCycleManager::loadPreset(const std::string & name,bool propagate)
+{
+
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_escape(name.c_str(), name.size());
+ std::string escaped_filename(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ escaped_filename += ".xml";
+
+ std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", escaped_filename));
+ llinfos << "Loading Day Cycle preset from " << pathName << llendl;
+
+ llifstream presetsXML;
+ presetsXML.open(pathName.c_str());
+
+ // That failed, try loading from the users area instead.
+ if(!presetsXML)
+ {
+ pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", escaped_filename);
+ llinfos << "Loading User Day Cycle preset from " << pathName << llendl;
+ presetsXML.open(pathName.c_str());
+ }
+
+ if (presetsXML)
+ {
+ LLSD paramsData(LLSD::emptyMap());
+
+ LLPointer parser = new LLSDXMLParser();
+
+ parser->parse(presetsXML, paramsData, LLSDSerialize::SIZE_UNLIMITED);
+
+ std::map::iterator mIt = mParamList.find(name);
+ if(mIt == mParamList.end())
+ {
+ addParamSet(name, paramsData);
+ }
+ else
+ {
+ setParamSet(name, paramsData);
+ }
+ presetsXML.close();
+ }
+ else
+ {
+ llwarns << "Can't find " << name << llendl;
+ return;
+ }
+
+
+}
+
+void AscentDayCycleManager::savePreset(const std::string & name)
+{
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_escape(name.c_str(), name.size());
+ std::string escaped_filename(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ escaped_filename += ".xml";
+
+ // make an empty llsd
+ LLSD paramsData(LLSD::emptyMap());
+ std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", escaped_filename));
+
+ // fill it with LLSD windlight params
+ //paramsData = mParamList[name].getAll();
+
+ // write to file
+ llofstream presetsXML(pathName);
+ LLPointer formatter = new LLSDXMLFormatter();
+ formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
+ presetsXML.close();
+}
+
+void AscentDayCycleManager::update(LLViewerCamera * cam)
+{
+ LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM);
+
+ // sync menus if they exist
+ if(LLFloaterWindLight::isOpen())
+ {
+ LLFloaterWindLight::instance()->syncMenu();
+ }
+ if(LLFloaterDayCycle::isOpen())
+ {
+ LLFloaterDayCycle::instance()->syncMenu();
+ }
+ if(LLFloaterEnvSettings::isOpen())
+ {
+ LLFloaterEnvSettings::instance()->syncMenu();
+ }
+
+ stop_glerror();
+}
+
+// static
+void AscentDayCycleManager::initClass(void)
+{
+ instance();
+}
+
+// static
+void AscentDayCycleManager::cleanupClass()
+{
+ delete sInstance;
+ sInstance = NULL;
+}
+
+void AscentDayCycleManager::resetAnimator(F32 curTime, bool run)
+{
+ mAnimator.setTrack(mDay.mTimeMap, mDay.mDayRate,
+ curTime, run);
+
+ return;
+}
+bool AscentDayCycleManager::addParamSet(const std::string& name, LLWLDayCycle& param)
+{
+ // add a new one if not one there already
+ std::map::iterator mIt = mParamList.find(name);
+ if(mIt == mParamList.end())
+ {
+ mParamList[name] = param;
+ return true;
+ }
+
+ return false;
+}
+
+BOOL AscentDayCycleManager::addParamSet(const std::string& name, LLSD const & param)
+{
+ // add a new one if not one there already
+ std::map::const_iterator finder = mParamList.find(name);
+ if(finder == mParamList.end())
+ {
+ mParamList[name].mName = name;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+bool AscentDayCycleManager::getParamSet(const std::string& name, LLWLDayCycle& param)
+{
+ // find it and set it
+ std::map::iterator mIt = mParamList.find(name);
+ if(mIt != mParamList.end())
+ {
+ param = mParamList[name];
+ param.mName = name;
+ return true;
+ }
+
+ return false;
+}
+
+bool AscentDayCycleManager::setParamSet(const std::string& name, LLWLDayCycle& param)
+{
+ mParamList[name] = param;
+
+ return true;
+}
+
+bool AscentDayCycleManager::setParamSet(const std::string& name, const LLSD & param)
+{
+ // quick, non robust (we won't be working with files, but assets) check
+ if(!param.isMap())
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool AscentDayCycleManager::removeParamSet(const std::string& name, bool delete_from_disk)
+{
+ // remove from param list
+ std::map::iterator mIt = mParamList.find(name);
+ if(mIt != mParamList.end())
+ {
+ mParamList.erase(mIt);
+ }
+
+ F32 key;
+
+ // remove all references
+ bool stat = true;
+ do
+ {
+ // get it
+ stat = mDay.getKey(name, key);
+ if(stat == false)
+ {
+ break;
+ }
+
+ // and remove
+ stat = mDay.removeKey(key);
+
+ } while(stat == true);
+
+ if(delete_from_disk)
+ {
+ std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", ""));
+
+ // use full curl escaped name
+ char * curl_str = curl_escape(name.c_str(), name.size());
+ std::string escaped_name(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
+ }
+
+ return true;
+}
+
+
+// static
+AscentDayCycleManager * AscentDayCycleManager::instance()
+{
+ if(NULL == sInstance)
+ {
+ sInstance = new AscentDayCycleManager();
+
+ sInstance->loadPresets(LLStringUtil::null);
+
+ // load the day
+ sInstance->mDay.loadDayCycle(gSavedSettings.getString("AscentActiveDayCycle"));
+
+ // *HACK - sets cloud scrolling to what we want... fix this better in the future
+ sInstance->getParamSet("Default", sInstance->mCurParams);
+
+ // set it to noon
+ sInstance->resetAnimator(0.5, true);
+
+ // but use linden time sets it to what the estate is
+ sInstance->mAnimator.mUseLindenTime = true;
+ }
+
+ return sInstance;
+}
diff --git a/indra/newview/ascentdaycyclemanager.h b/indra/newview/ascentdaycyclemanager.h
new file mode 100644
index 000000000..6c84901c9
--- /dev/null
+++ b/indra/newview/ascentdaycyclemanager.h
@@ -0,0 +1,109 @@
+/**
+ * @file ascentdaycyclemanager.h
+ * @Author Duncan Garrett
+ * Manager for Windlight Daycycles so we can actually save more than one
+ *
+ * Created October 04 2010
+ *
+ * ALL SOURCE CODE IS PROVIDED "AS IS." THE CREATOR MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * k ilu bye
+ */
+
+#ifndef ASCENT_DAYCYCLEMANAGER_H
+#define ASCENT_DAYCYCLEMANAGER_H
+
+#include
+#include
+#include "llwldaycycle.h"
+#include "llwlanimator.h"
+#include "llwldaycycle.h"
+#include "llviewercamera.h"
+
+/// WindLight parameter manager class - what controls all the wind light shaders
+class AscentDayCycleManager
+{
+public:
+
+ AscentDayCycleManager();
+ ~AscentDayCycleManager();
+
+ /// load a preset file
+ void loadPresets(const std::string & fileName);
+
+ /// save the preset file
+ void savePresets(const std::string & fileName);
+
+ /// load an individual preset into the sky
+ void loadPreset(const std::string & name,bool propogate=true);
+
+ /// save the parameter presets to file
+ void savePreset(const std::string & name);
+
+ /// Set shader uniforms dirty, so they'll update automatically.
+ void propagateParameters(void);
+
+ /// Update shader uniforms that have changed.
+ void updateShaderUniforms(LLGLSLShader * shader);
+
+ /// setup the animator to run
+ void resetAnimator(F32 curTime, bool run);
+
+ /// update information camera dependent parameters
+ void update(LLViewerCamera * cam);
+
+
+ /// Perform global initialization for this class.
+ static void initClass(void);
+
+ // Cleanup of global data that's only inited once per class.
+ static void cleanupClass();
+
+ /// add a param to the list
+ bool addParamSet(const std::string& name, LLWLDayCycle& param);
+
+ /// add a param to the list
+ BOOL addParamSet(const std::string& name, LLSD const & param);
+
+ /// get a param from the list
+ bool getParamSet(const std::string& name, LLWLDayCycle& param);
+
+ /// set the param in the list with a new param
+ bool setParamSet(const std::string& name, LLWLDayCycle& param);
+
+ /// set the param in the list with a new param
+ bool setParamSet(const std::string& name, LLSD const & param);
+
+ /// gets rid of a parameter and any references to it
+ /// returns true if successful
+ bool removeParamSet(const std::string& name, bool delete_from_disk);
+
+ // singleton pattern implementation
+ static AscentDayCycleManager * instance();
+
+public:
+
+ // helper variables
+ LLWLAnimator mAnimator;
+
+
+ // list of params and how they're cycled for days
+ LLWLDayCycle mDay;
+
+ LLWLDayCycle mCurParams;
+
+ /// Sun Delta Terrain tweak variables.
+ F32 mSunDeltaYaw;
+
+ // list of all the day cycles, listed by name
+ std::map mParamList;
+
+
+private:
+ // our parameter manager singleton instance
+ static AscentDayCycleManager * sInstance;
+
+};
+
+#endif
diff --git a/indra/newview/ascentfloatercontactgroups.cpp b/indra/newview/ascentfloatercontactgroups.cpp
index d78000a58..a5d5c67af 100644
--- a/indra/newview/ascentfloatercontactgroups.cpp
+++ b/indra/newview/ascentfloatercontactgroups.cpp
@@ -20,7 +20,7 @@
#include "llcombobox.h" //Combo dropdowns
#include "llscrolllistctrl.h" //List box for filenames
#include "lluictrlfactory.h" //Loads the XUI
-
+#include "llresmgr.h"
// project includes
#include "llviewercontrol.h"
#include "llviewerwindow.h"
@@ -84,8 +84,13 @@ void ASFloaterContactGroups::onBtnSave(void* userdata)
LLScrollListCtrl* scroller = self->getChild("group_scroll_list");
if(scroller != NULL)
{
- for (S32 i = self->mSelectedUUIDs.count(); i > 0; --i)
+ for (S32 i = (self->mSelectedUUIDs.count() - 1); i >= 0; --i)
{
+ std::string i_str;
+ LLResMgr::getInstance()->getIntegerString(i_str, i);
+ LLChat msg("Adding index " + i_str + ": " + self->mSelectedUUIDs.get(i).asString());
+ LLFloaterChat::addChat(msg);
+
self->addContactMember(scroller->getValue().asString(), self->mSelectedUUIDs.get(i));
}
}
diff --git a/indra/newview/ascentprefssys.cpp b/indra/newview/ascentprefssys.cpp
index cd7c84875..9a3054115 100644
--- a/indra/newview/ascentprefssys.cpp
+++ b/indra/newview/ascentprefssys.cpp
@@ -116,7 +116,6 @@ LLPrefsAscentSysImpl::LLPrefsAscentSysImpl()
childSetCommitCallback("system_folder_check", onCommitCheckBox, this);
childSetCommitCallback("show_look_at_check", onCommitCheckBox, this);
childSetCommitCallback("enable_clouds", onCommitCheckBox, this);
-
refreshValues();
refresh();
}
@@ -187,10 +186,8 @@ void LLPrefsAscentSysImpl::refreshValues()
//Performance -------------------------------------------------------------------------
mFetchInventoryOnLogin = gSavedSettings.getBOOL("FetchInventoryOnLogin");
mEnableLLWind = gSavedSettings.getBOOL("WindEnabled");
-
- mEnableClouds = gSavedSettings.getBOOL("CloudsEnabled");
- mEnableClassicClouds = gSavedSettings.getBOOL("SkyUseClassicClouds");
-
+ mEnableClouds = gSavedSettings.getBOOL("CloudsEnabled");
+ mEnableClassicClouds = gSavedSettings.getBOOL("SkyUseClassicClouds");
mSpeedRez = gSavedSettings.getBOOL("SpeedRez");
mSpeedRezInterval = gSavedSettings.getU32("SpeedRezInterval");
@@ -295,7 +292,7 @@ void LLPrefsAscentSysImpl::refresh()
childSetValue("fetch_inventory_on_login_check", mFetchInventoryOnLogin);
childSetValue("enable_wind", mEnableLLWind);
childSetValue("enable_clouds", mEnableClouds);
- childSetValue("enable_classic_clouds", mEnableClassicClouds);
+ childSetValue("enable_classic_clouds", mEnableClassicClouds);
gLLWindEnabled = mEnableLLWind;
childSetValue("speed_rez_check", mSpeedRez);
childSetEnabled("speed_rez_interval", mSpeedRez);
@@ -335,7 +332,7 @@ void LLPrefsAscentSysImpl::cancel()
childSetValue("fetch_inventory_on_login_check", mFetchInventoryOnLogin);
childSetValue("enable_wind", mEnableLLWind);
childSetValue("enable_clouds", mEnableClouds);
- childSetValue("enable_classic_clouds", mEnableClassicClouds);
+ childSetValue("enable_classic_clouds", mEnableClassicClouds);
childSetValue("speed_rez_check", mSpeedRez);
if (mSpeedRez)
{
@@ -357,7 +354,6 @@ void LLPrefsAscentSysImpl::cancel()
childSetValue("enable_clouds", mEnableClouds);
childSetValue("enable_classic_clouds", mEnableClassicClouds);
-
gLLWindEnabled = mEnableLLWind;
}
@@ -526,4 +522,4 @@ void LLPrefsAscentSys::cancel()
LLPanel* LLPrefsAscentSys::getPanel()
{
return &impl;
-}
\ No newline at end of file
+}
diff --git a/indra/newview/ascentprefsvan.cpp b/indra/newview/ascentprefsvan.cpp
index 5f13f675a..75c4794ca 100644
--- a/indra/newview/ascentprefsvan.cpp
+++ b/indra/newview/ascentprefsvan.cpp
@@ -202,15 +202,15 @@ void LLPrefsAscentVanImpl::refreshValues()
//Colors
mShowSelfClientTag = gSavedSettings.getBOOL("AscentShowSelfTag");
mShowSelfClientTagColor = gSavedSettings.getBOOL("AscentShowSelfTagColor");
- mCustomTagOn = gCOASavedSettings->getBOOL("AscentUseCustomTag");
-
- mSelectedClient = gCOASavedSettings->getU32("AscentReportClientIndex");
- mEffectColor = gCOASavedSettings->getColor4("EffectColor");
+ mCustomTagOn = gSavedSettings.getBOOL("AscentUseCustomTag");
- childSetEnabled("custom_tag_label_text", mCustomTagOn);
- childSetEnabled("custom_tag_label_box", mCustomTagOn);
- childSetEnabled("custom_tag_color_text", mCustomTagOn);
- childSetEnabled("custom_tag_color_swatch", mCustomTagOn);
+ mSelectedClient = gCOASavedSettings->getU32("AscentReportClientIndex");
+ mEffectColor = gCOASavedSettings->getColor4("EffectColor");
+
+ childSetEnabled("custom_tag_label_text", mCustomTagOn);
+ childSetEnabled("custom_tag_label_box", mCustomTagOn);
+ childSetEnabled("custom_tag_color_text", mCustomTagOn);
+ childSetEnabled("custom_tag_color_swatch", mCustomTagOn);
mCustomTagLabel = gCOASavedSettings->getString("AscentCustomTagLabel");
mCustomTagColor = gCOASavedSettings->getColor4("AscentCustomTagColor");
diff --git a/indra/newview/ascentuploadbrowser.cpp b/indra/newview/ascentuploadbrowser.cpp
index d9a5669ce..e0b3b3db1 100644
--- a/indra/newview/ascentuploadbrowser.cpp
+++ b/indra/newview/ascentuploadbrowser.cpp
@@ -31,6 +31,7 @@
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
+LLSD ASFloaterUploadBrowser::mUploaderSettings;
ASFloaterUploadBrowser* ASFloaterUploadBrowser::sInstance = NULL;
@@ -43,24 +44,37 @@ ASFloaterUploadBrowser::ASFloaterUploadBrowser()
: LLFloater(std::string("floater_upload_browser"), std::string("FloaterUploadRect"), LLStringUtil::null)
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_upload_browser.xml");
- mPathName = gSavedSettings.getString("AscentUploadFolder");
+
+ mUploaderSettings.clear();
+ mUploaderSettings = gSavedSettings.getLLSD("AscentUploadSettings");
+
+ mPathName = mUploaderSettings["ActivePath"].asString();
if (mPathName == "None")
mPathName = gDirUtilp->getExecutableDir();
mFilterType = "None";
+
//File list ------------------------------------------------------
mFileList = getChild("file_list");
childSetCommitCallback("file_list", onClickFile, this);
childSetDoubleClickCallback("file_list", onDoubleClick);
//Above File List ------------------------------------------------
+
mBookmarkCombo = getChild("bookmark_combo");
+ S32 index;
+ for (index = 0; index < mUploaderSettings["Bookmarks"].size(); index++)
+ {
+ std::string bookmark = mUploaderSettings["Bookmarks"][index].asString();
+ if (bookmark != "")
+ mBookmarkCombo->add(bookmark, ADD_BOTTOM);
+ }
mDriveCombo = getChild("drive_combo");
childSetCommitCallback("drive_combo", onChangeDrives, this);
- //This is so unbelievably shitty I can't believe it -HgB
+ //This is so unbelievably shitty I can't handle it -HgB
std::string drive_letters[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; //Oh my god it's somehow worse now -HgB
- S32 index;
+
mDriveCombo->removeall();
for (index = 0; index < 26; index++)
{
@@ -73,7 +87,7 @@ ASFloaterUploadBrowser::ASFloaterUploadBrowser()
}
childSetAction("directory_button", onClickFilepathGoto, this);
-
+ childSetCommitCallback("dir_path", onDirCommit, (void*)this);
//Below File List ------------------------------------------------
childSetCommitCallback("file_filter_combo", onUpdateFilter, this);
@@ -81,8 +95,8 @@ ASFloaterUploadBrowser::ASFloaterUploadBrowser()
refresh();
mFileList->sortByColumn(std::string("file_name"), TRUE);
mFileList->sortByColumn(std::string("file_type"), TRUE);
-
-
+ childHide("multiple_uploads_label");
+ childHide("bad_image_text");
}
// Destroys the object
@@ -91,12 +105,19 @@ ASFloaterUploadBrowser::~ASFloaterUploadBrowser()
sInstance = NULL;
}
-//static
-void ASFloaterUploadBrowser::onClickFilepathGoto(void* data)
+void ASFloaterUploadBrowser::onDirCommit(LLUICtrl* ctrl, void* data)
{
ASFloaterUploadBrowser* panelp = (ASFloaterUploadBrowser*)data;
- std::string new_path = panelp->childGetValue("dir_path");
- if (new_path != panelp->mPathName)
+ if (panelp)
+ {
+ panelp->onClickFilepathGoto(data);
+ }
+}
+
+void ASFloaterUploadBrowser::updateBrowser(void* data, std::string new_path)
+{
+ ASFloaterUploadBrowser* panelp = (ASFloaterUploadBrowser*)data;
+ if ((new_path != panelp->mPathName)||(new_path == ""))
{
panelp->mPathName = new_path;
panelp->refresh();
@@ -105,6 +126,14 @@ void ASFloaterUploadBrowser::onClickFilepathGoto(void* data)
}
}
+//static
+void ASFloaterUploadBrowser::onClickFilepathGoto(void* data)
+{
+ ASFloaterUploadBrowser* panelp = (ASFloaterUploadBrowser*)data;
+ std::string new_path = panelp->childGetValue("dir_path");
+ panelp->updateBrowser(data, new_path);
+}
+
void ASFloaterUploadBrowser::onClickFile(LLUICtrl* ctrl, void* user_data)
{
ASFloaterUploadBrowser* panelp = (ASFloaterUploadBrowser*)user_data;
@@ -116,10 +145,7 @@ void ASFloaterUploadBrowser::onChangeDrives(LLUICtrl* ctrl, void* user_data)
ASFloaterUploadBrowser* panelp = (ASFloaterUploadBrowser*)user_data;
if (panelp->mDriveCombo->getSelectedValue().asString() != panelp->mFilterType)
{
- panelp->mPathName = panelp->mDriveCombo->getSelectedValue().asString();
- panelp->refresh();
- panelp->mFileList->selectFirstItem();
- panelp->childSetValue("asset_name", "");
+ panelp->updateBrowser(user_data, panelp->mDriveCombo->getSelectedValue().asString());
}
}
@@ -131,9 +157,7 @@ void ASFloaterUploadBrowser::onUpdateFilter(LLUICtrl* ctrl, void* user_data)
{
panelp->mFilterType = "";
panelp->mFilterType = combo->getSelectedValue().asString();
- panelp->refresh();
- panelp->mFileList->selectFirstItem();
- panelp->childSetValue("asset_name", "");
+ panelp->updateBrowser(user_data, "");
}
}
@@ -148,21 +172,44 @@ void ASFloaterUploadBrowser::refreshUploadOptions()
}
else
{
- if (mFileList->getFirstSelected()->getColumn(LIST_FILE_TYPE)->getValue().asInteger() == LIST_TYPE_FILE)
+ if (mFileList->getFirstSelected()->getColumn(LIST_ASSET_TYPE)->getValue().asInteger() == LIST_TYPE_FILE)
{
+ std::string name;
+ bool show_tex = false;
+ bool show_snd = false;
+ bool show_anm = false;
+ bool show_multiple = false;
if (mFileList->getAllSelected().size() > 1)
{
+
llinfos << "Selected multiple files." << llendl;
- childSetValue("asset_name", "(Multiple)");
- childSetLabelArg("upload_button", "[COST]", std::string("$L" + (10 * mFileList->getAllSelected().size())));
+ name = "(Multiple)";
+ show_multiple = true;
+ childSetValue("multiple_uploads_label", "Multiple files selected. Total cost is: " + llformat("%d", mFileList->getAllSelected().size() * 10));
}
else
{
- llinfos << "Selected a file." << llendl;
- std::string name = mFileList->getFirstSelected()->getColumn(LIST_FILE_NAME)->getValue().asString();
- childSetValue("asset_name", name);
- childSetLabelArg("upload_button", "[COST]", std::string("$L10"));
+ int type = mFileList->getFirstSelected()->getColumn(LIST_FILE_TYPE)->getValue().asInteger();
+ llinfos << "Selected a file, type" << type << llendl;
+ if (type == FILE_TEXTURE)
+ {
+ show_tex = true;
+ }
+ else if (type == FILE_SOUND)
+ {
+ show_snd = true;
+ }
+ else if (type == FILE_ANIMATION)
+ {
+ show_anm = true;
+ }
+ name = mFileList->getFirstSelected()->getColumn(LIST_FILE_NAME)->getValue().asString();
+
}
+ childSetVisible("texture_preview_label", (show_tex && !show_multiple));
+ childSetVisible("texture_preview_combo", (show_tex && !show_multiple));
+ childSetVisible("multiple_uploads_label", show_multiple);
+ childSetValue("asset_name", name);
}
}
}
@@ -176,14 +223,14 @@ void ASFloaterUploadBrowser::onDoubleClick(void* user_data)
void ASFloaterUploadBrowser::handleDoubleClick()
{
- if (mFileList->getFirstSelected()->getColumn(LIST_FILE_TYPE)->getValue().asInteger() == LIST_TYPE_PARENT)
+ if (mFileList->getFirstSelected()->getColumn(LIST_ASSET_TYPE)->getValue().asInteger() == LIST_TYPE_PARENT)
{
S32 dirLimiterIndex = mPathName.find_last_of(gDirUtilp->getDirDelimiter());
mPathName = mPathName.substr(0, dirLimiterIndex);
refresh();
mFileList->selectFirstItem();
}
- else if (mFileList->getFirstSelected()->getColumn(LIST_FILE_TYPE)->getValue().asInteger() == LIST_TYPE_FOLDER)
+ else if (mFileList->getFirstSelected()->getColumn(LIST_ASSET_TYPE)->getValue().asInteger() == LIST_TYPE_FOLDER)
{
//Make sure that it's an actual folder so you don't get stuck - Specifically meant for files with no extension. -HgB
std::string new_path = mPathName + gDirUtilp->getDirDelimiter() + mFileList->getFirstSelected()->getColumn(LIST_FILE_NAME)->getValue().asString();
@@ -205,7 +252,8 @@ void ASFloaterUploadBrowser::refresh()
mFileList->deselectAllItems();
mFileList->deleteAllItems();
childSetValue("dir_path", gDirUtilp->getDirName(fullPath));
- gSavedSettings.setString("AscentUploadFolder", mPathName);
+ mUploaderSettings["ActivePath"] = mPathName;
+ gSavedSettings.setLLSD("AscentUploadSettings", mUploaderSettings);
gDirUtilp->getNextFileInDir(gDirUtilp->getChatLogsDir(),"*", filename, false); //Clears the last file
bool found = true;
S32 file_count = 0;
@@ -229,46 +277,62 @@ void ASFloaterUploadBrowser::refresh()
filetype_column["column"] = "file_type";
filetype_column["type"] = "number";
+ LLSD& assettype_column = element["columns"][LIST_ASSET_TYPE];
+ assettype_column["column"] = "asset_type";
+ assettype_column["type"] = "number";
+
LLSD& invtype_column = element["columns"][LIST_INVENTORY_TYPE];
invtype_column["column"] = "icon_inventory_type";
invtype_column["type"] = "icon";
invtype_column["value"] = "inv_folder_trash.tga";
+
if (((extensionL == "jpeg")||(extensionL == "jpg")||(extensionL == "tga")
||(extensionL == "png")||(extensionL == "bmp"))&&((mFilterType == "None")||(mFilterType == "Texture")))
{
invtype_column["value"] = "inv_item_texture.tga";
filename_column["value"] = filename.substr(0, periodIndex);
- filetype_column["value"] = LIST_TYPE_FILE;
+ filetype_column["value"] = FILE_TEXTURE;
+ assettype_column["value"] = LIST_TYPE_FILE;
+
}
else if ((extensionL == "wav")&&((mFilterType == "None")||(mFilterType == "Sound")))
{
invtype_column["value"] = "inv_item_sound.tga";
filename_column["value"] = filename.substr(0, periodIndex);
- filetype_column["value"] = LIST_TYPE_FILE;
+ filetype_column["value"] = FILE_SOUND;
+ assettype_column["value"] = LIST_TYPE_FILE;
}
else if (((extensionL == "bvh")||(extensionL == "anim"))&&((mFilterType == "None")||(mFilterType == "Animation")))
{
invtype_column["value"] = "inv_item_animation.tga";
filename_column["value"] = filename.substr(0, periodIndex);
- filetype_column["value"] = LIST_TYPE_FILE;
+ filetype_column["value"] = FILE_ANIMATION;
+ assettype_column["value"] = LIST_TYPE_FILE;
}
else if ((extension == filename.substr(0, filename.length() - 1))&&(filename != "."))
{
- invtype_column["value"] = "inv_folder_plain_closed.tga";
- filename_column["value"] = filename;
- filetype_column["value"] = LIST_TYPE_FOLDER;
+ std::string test_path = mPathName + gDirUtilp->getDirDelimiter() + filename + gDirUtilp->getDirDelimiter();
+ S32 file_count = gDirUtilp->countFilesInDir(test_path, "*.*");
+ if(file_count)
+ {
+ invtype_column["value"] = "inv_folder_plain_closed.tga";
+ filename_column["value"] = filename;
+ filetype_column["value"] = FOLDER;
+ assettype_column["value"] = LIST_TYPE_FOLDER;
+ }
}
else if (filename == "..")
{
invtype_column["value"] = "inv_folder_plain_open.tga";
filename_column["value"] = filename;
- filetype_column["value"] = LIST_TYPE_PARENT;
+ filetype_column["value"] = FOLDER;
+ assettype_column["value"] = LIST_TYPE_PARENT;
}
if (invtype_column["value"].asString() != "inv_folder_trash.tga")
{
mFileList->addElement(element, ADD_BOTTOM);
- if (filetype_column["value"].asInteger() == LIST_TYPE_FILE)
+ if (assettype_column["value"].asInteger() == LIST_TYPE_FILE)
{
file_count++;
}
@@ -278,6 +342,8 @@ void ASFloaterUploadBrowser::refresh()
std::string result;
LLResMgr::getInstance()->getIntegerString(result, file_count);
+ if (result == "")
+ result = "0";
childSetTextArg("result_label", "[COUNT]", result);
mFileList->sortItems();
diff --git a/indra/newview/ascentuploadbrowser.h b/indra/newview/ascentuploadbrowser.h
index bbc6316f4..a015134a9 100644
--- a/indra/newview/ascentuploadbrowser.h
+++ b/indra/newview/ascentuploadbrowser.h
@@ -28,10 +28,11 @@ public:
static void onClickFile(LLUICtrl* ctrl, void* user_data);
static void onUpdateFilter(LLUICtrl* ctrl, void* user_data);
static void onDoubleClick(void* user_data);
-
+ static void onDirCommit (LLUICtrl* ctrl, void* data);
static void onChangeDrives(LLUICtrl* ctrl, void* user_data);
static void onClickFilepathGoto(void* data);
+ void updateBrowser(void* data, std::string new_path);
void refresh();
void refreshUploadOptions();
void handleDoubleClick();
@@ -40,10 +41,12 @@ public:
std::vector datas;
private:
+ static LLSD mUploaderSettings;
static ASFloaterUploadBrowser* sInstance;
enum FILE_COLUMN_ORDER
{
LIST_FILE_TYPE,
+ LIST_ASSET_TYPE,
LIST_INVENTORY_TYPE,
LIST_FILE_NAME,
LIST_DATA
@@ -54,6 +57,13 @@ private:
LIST_TYPE_FOLDER,
LIST_TYPE_FILE
};
+ enum FILE_TYPE
+ {
+ FOLDER,
+ FILE_TEXTURE,
+ FILE_SOUND,
+ FILE_ANIMATION
+ };
LLScrollListCtrl* mFileList;
LLComboBox* mDriveCombo;
LLComboBox* mBookmarkCombo;
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
index a49144ec0..4e0b8205d 100644
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -164,15 +164,15 @@ Matrox .*Matrox.* 0 0
Mesa .*Mesa.* 0 0
NVIDIA GT 120 .*NVIDIA.*GeForce.*GT.*12.* 2 1
NVIDIA GT 130 .*NVIDIA.*GeForce.*GT.*13.* 3 1
-NVIDIA GT 220 .*NVIDIA.*GeForce.*GT.*22.* 3 1
+NVIDIA GT 220 .*NVIDIA.*GeForce.*GT.*22.* 3 1
NVIDIA GTS 250 .*NVIDIA.*GeForce.*GTS.*25.* 3 1
NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*26.* 3 1
NVIDIA GTX 270 .*NVIDIA.*GeForce.*GTX.*27.* 3 1
NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*28.* 3 1
NVIDIA GTX 290 .*NVIDIA.*GeForce.*GTX.*29.* 3 1
-NVIDIA GTX 460 .*NVIDIA.*GeForce.*GTX.*46.* 3 1
-NVIDIA GTX 470 .*NVIDIA.*GeForce.*GTX.*47.* 3 1
-NVIDIA GTX 480 .*NVIDIA.*GeForce.*GTX.*48.* 3 1
+NVIDIA GTX 460 .*NVIDIA.*GeForce.*GTX.*46.* 3 1
+NVIDIA GTX 470 .*NVIDIA.*GeForce.*GTX.*47.* 3 1
+NVIDIA GTX 480 .*NVIDIA.*GeForce.*GTX.*48.* 3 1
NVIDIA C51 .*NVIDIA.*C51.* 0 1
NVIDIA G72 .*NVIDIA.*G72.* 1 1
NVIDIA G73 .*NVIDIA.*G73.* 1 1
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index b9b81ec5c..fe4f246e7 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -347,7 +347,7 @@ LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ;
void idle_afk_check()
{
// check idle timers
- if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")))
+ if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")) && (gSavedSettings.getF32("AFKTimeout") > 0))
{
gAgent.setAFK();
}
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index da5c1b80b..20fd668d7 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -732,8 +732,26 @@ std::string LLAppViewerLinux::generateSerialNumber()
{
char serial_md5[MD5HEX_STR_SIZE];
serial_md5[0] = 0;
+ std::string best;
+ std::string uuiddir("/dev/disk/by-uuid/");
- // TODO
+ // trawl /dev/disk/by-uuid looking for a good-looking UUID to grab
+ std::string this_name;
+ BOOL wrap = FALSE;
+ while (gDirUtilp->getNextFileInDir(uuiddir, "*", this_name, wrap))
+ {
+ if (this_name.length() > best.length() ||
+ (this_name.length() == best.length() &&
+ this_name > best))
+ {
+ // longest (and secondarily alphabetically last) so far
+ best = this_name;
+ }
+ }
+
+ // we don't return the actual serial number, just a hash of it.
+ LLMD5 md5( reinterpret_cast(best.c_str()) );
+ md5.hex_digest(serial_md5);
return serial_md5;
-}
+}
\ No newline at end of file
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index 8608d6d0b..85a0ef98b 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -44,7 +44,7 @@
#include "llagent.h"
#include "llcombobox.h"
-#include "llnotify.h"
+#include "llnotify.h"
#include "llviewerimagelist.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index 58876a8de..07106e6b1 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -37,6 +37,7 @@
#include "pipeline.h"
#include "llsky.h"
+#include "llboost.h"
#include "llsliderctrl.h"
#include "llmultislider.h"
#include "llmultisliderctrl.h"
@@ -54,12 +55,16 @@
#include "llviewerwindow.h"
#include "llwlparamset.h"
+#include "llwldaycycle.h"
#include "llwlparammanager.h"
+#include "ascentdaycyclemanager.h" //Ascent Addition
#include "llpostprocess.h"
#include "llfloaterwindlight.h"
LLFloaterDayCycle* LLFloaterDayCycle::sDayCycle = NULL;
+
+std::set LLFloaterDayCycle::sDefaultPresets;
std::map LLFloaterDayCycle::sSliderToKey;
const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f;
@@ -88,6 +93,37 @@ LLFloaterDayCycle::LLFloaterDayCycle() : LLFloater(std::string("Day Cycle Floate
sldr->addSlider();
+ // add the combo boxes
+ LLComboBox* comboBox = getChild("DayCyclePresetsCombo");
+
+ if(comboBox != NULL) {
+
+ std::map::iterator mIt =
+ AscentDayCycleManager::instance()->mParamList.begin();
+ for(; mIt != AscentDayCycleManager::instance()->mParamList.end(); mIt++)
+ {
+ comboBox->add(mIt->first);
+ }
+
+ // entry for when we're in estate time
+ comboBox->add(LLStringUtil::null);
+
+ // set defaults on combo boxes
+ comboBox->selectByValue(LLSD("Default"));
+ }
+
+ // add the list of presets
+ std::string def_days = getString("DaycycleDefaultNames");
+
+ // no editing or deleting of the blank string
+ sDefaultPresets.insert("");
+ boost_tokenizer tokens(def_days, boost::char_separator(":"));
+ for (boost_tokenizer::iterator token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
+ {
+ std::string tok(*token_iter);
+ //sDefaultPresets.insert(tok);
+ }
+
// load it up
initCallbacks();
}
@@ -130,6 +166,15 @@ void LLFloaterDayCycle::initCallbacks(void)
childSetAction("WLLoadDayCycle", onLoadDayCycle, NULL);
childSetAction("WLSaveDayCycle", onSaveDayCycle, NULL);
+ LLComboBox* comboBox = getChild("DayCyclePresetsCombo");
+
+ //childSetAction("WLLoadPreset", onLoadPreset, comboBox);
+ childSetAction("DayCycleNewPreset", onNewPreset, comboBox);
+ childSetAction("DayCycleSavePreset", onSavePreset, comboBox);
+ childSetAction("DayCycleDeletePreset", onDeletePreset, comboBox);
+
+ comboBox->setCommitCallback(onChangePresetName);
+
childSetAction("WLAddKey", onAddKey, NULL);
childSetAction("WLDeleteKey", onDeleteKey, NULL);
}
@@ -268,6 +313,216 @@ void LLFloaterDayCycle::onClose(bool app_quitting)
}
}
+void LLFloaterDayCycle::onNewPreset(void* userData)
+{
+ LLNotifications::instance().add("NewDaycyclePreset", LLSD(), LLSD(), newPromptCallback);
+}
+
+void LLFloaterDayCycle::onSavePreset(void* userData)
+{
+ // get the name
+ LLComboBox* comboBox = sDayCycle->getChild(
+ "DayCyclePresetsCombo");
+
+ // don't save the empty name
+ if(comboBox->getSelectedItemLabel() == "")
+ {
+ return;
+ }
+
+ // check to see if it's a default and shouldn't be overwritten
+ std::set::iterator sIt = sDefaultPresets.find(
+ comboBox->getSelectedItemLabel());
+ if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("SkyEditPresets"))
+ {
+ LLNotifications::instance().add("WLNoEditDefault");
+ return;
+ }
+
+ LLWLParamManager::instance()->mCurParams.mName =
+ comboBox->getSelectedItemLabel();
+
+ LLNotifications::instance().add("WLSavePresetAlert", LLSD(), LLSD(), saveAlertCallback);
+}
+
+bool LLFloaterDayCycle::saveAlertCallback(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotification::getSelectedOption(notification, response);
+ // if they choose save, do it. Otherwise, don't do anything
+ if(option == 0)
+ {
+ LLComboBox* combo_box = sDayCycle->getChild("DayCyclePresetsCombo");
+ // comment this back in to save to file
+ LLWLParamManager::instance()->mDay.saveDayCycle(combo_box->getSelectedValue().asString());
+ }
+ return false;
+}
+
+void LLFloaterDayCycle::onDeletePreset(void* userData)
+{
+ LLComboBox* combo_box = sDayCycle->getChild(
+ "DayCyclePresetsCombo");
+
+ if(combo_box->getSelectedValue().asString() == "")
+ {
+ return;
+ }
+
+ LLSD args;
+ args["SKY"] = combo_box->getSelectedValue().asString();
+ LLNotifications::instance().add("WLDeletePresetAlert", args, LLSD(),
+ boost::bind(&LLFloaterDayCycle::deleteAlertCallback, sDayCycle, _1, _2));
+}
+
+bool LLFloaterDayCycle::deleteAlertCallback(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotification::getSelectedOption(notification, response);
+
+ // if they choose delete, do it. Otherwise, don't do anything
+ if(option == 0)
+ {
+ LLComboBox* combo_box = getChild(
+ "DayCyclePresetsCombo");
+ LLFloaterDayCycle* day_cycle = NULL;
+ LLComboBox* key_combo = NULL;
+ LLMultiSliderCtrl* mult_sldr = NULL;
+
+ if(LLFloaterDayCycle::isOpen())
+ {
+ day_cycle = LLFloaterDayCycle::instance();
+ key_combo = day_cycle->getChild(
+ "WLKeyPresets");
+ mult_sldr = day_cycle->getChild("WLDayCycleKeys");
+ }
+
+ std::string name(combo_box->getSelectedValue().asString());
+
+ // check to see if it's a default and shouldn't be deleted
+ std::set::iterator sIt = sDefaultPresets.find(name);
+ if(sIt != sDefaultPresets.end())
+ {
+ LLNotifications::instance().add("WLNoEditDefault");
+ return false;
+ }
+
+ AscentDayCycleManager::instance()->removeParamSet(name, true);
+
+ // remove and choose another
+ S32 new_index = combo_box->getCurrentIndex();
+
+ combo_box->remove(name);
+ if(key_combo != NULL)
+ {
+ key_combo->remove(name);
+
+ // remove from slider, as well
+ day_cycle->deletePreset(name);
+ }
+
+ // pick the previously selected index after delete
+ if(new_index > 0)
+ {
+ new_index--;
+ }
+
+ if(combo_box->getItemCount() > 0)
+ {
+ combo_box->setCurrentByIndex(new_index);
+ }
+ }
+ return false;
+}
+
+bool LLFloaterDayCycle::newPromptCallback(const LLSD& notification, const LLSD& response)
+{
+ std::string text = response["message"].asString();
+ S32 option = LLNotification::getSelectedOption(notification, response);
+
+ if(text == "")
+ {
+ return false;
+ }
+
+ if(option == 0) {
+ LLComboBox* comboBox = sDayCycle->getChild(
+ "DayCyclePresetsCombo");
+
+ LLFloaterDayCycle* sDayCycle = NULL;
+ LLComboBox* keyCombo = NULL;
+ if(LLFloaterDayCycle::isOpen())
+ {
+ sDayCycle = LLFloaterDayCycle::instance();
+ keyCombo = sDayCycle->getChild(
+ "WLKeyPresets");
+ }
+
+ // add the current parameters to the list
+ // see if it's there first
+ std::map::iterator mIt =
+ AscentDayCycleManager::instance()->mParamList.find(text);
+
+ // if not there, add a new one
+ if(mIt == AscentDayCycleManager::instance()->mParamList.end())
+ {
+ AscentDayCycleManager::instance()->addParamSet(text,
+ AscentDayCycleManager::instance()->mCurParams);
+ comboBox->add(text);
+ comboBox->sortByName();
+
+ // add a blank to the bottom
+ comboBox->selectFirstItem();
+ if(comboBox->getSimple() == "")
+ {
+ comboBox->remove(0);
+ }
+ comboBox->add(LLStringUtil::null);
+
+ comboBox->setSelectedByValue(text, true);
+ if(LLFloaterDayCycle::isOpen())
+ {
+ keyCombo->add(text);
+ keyCombo->sortByName();
+ }
+ LLWLParamManager::instance()->mDay.saveDayCycle(text);
+
+ // otherwise, send a message to the user
+ }
+ else
+ {
+ LLNotifications::instance().add("ExistsSkyPresetAlert");
+ }
+ }
+ return false;
+}
+
+void LLFloaterDayCycle::onChangePresetName(LLUICtrl* ctrl, void * userData)
+{
+
+ LLComboBox * combo_box = static_cast(ctrl);
+
+ if(combo_box->getSimple() == "")
+ {
+ return;
+ }
+
+ LLWLParamManager::instance()->mDay.loadDayCycle(combo_box->getSelectedValue().asString());
+ gSavedSettings.setString("AscentActiveDayCycle", combo_box->getSelectedValue().asString());
+ // sync it all up
+ syncSliderTrack();
+ syncMenu();
+
+ // set the param manager's track to the new one
+ LLMultiSliderCtrl* tSldr;
+ tSldr = sDayCycle->getChild(
+ "WLTimeSlider");
+ LLWLParamManager::instance()->resetAnimator(
+ tSldr->getCurSliderValue() / sHoursPerDay, false);
+
+ // and draw it
+ LLWLParamManager::instance()->mAnimator.update(
+ LLWLParamManager::instance()->mCurParams);
+}
+
void LLFloaterDayCycle::onRunAnimSky(void* userData)
{
// if no keys, do nothing
@@ -307,8 +562,8 @@ void LLFloaterDayCycle::onStopAnimSky(void* userData)
void LLFloaterDayCycle::onUseLindenTime(void* userData)
{
- LLFloaterWindLight* wl = LLFloaterWindLight::instance();
- LLComboBox* box = wl->getChild("WLPresetsCombo");
+ LLFloaterDayCycle* dc = LLFloaterDayCycle::instance();
+ LLComboBox* box = dc->getChild("DayCyclePresetsCombo");
box->selectByValue("");
LLWLParamManager::instance()->mAnimator.mIsRunning = true;
@@ -317,7 +572,7 @@ void LLFloaterDayCycle::onUseLindenTime(void* userData)
void LLFloaterDayCycle::onLoadDayCycle(void* userData)
{
- LLWLParamManager::instance()->mDay.loadDayCycle("Default.xml");
+ //LLWLParamManager::instance()->mDay.loadDayCycle("Default.xml");
// sync it all up
syncSliderTrack();
@@ -337,7 +592,7 @@ void LLFloaterDayCycle::onLoadDayCycle(void* userData)
void LLFloaterDayCycle::onSaveDayCycle(void* userData)
{
- LLWLParamManager::instance()->mDay.saveDayCycle("Default.xml");
+ //LLWLParamManager::instance()->mDay.saveDayCycle("Default.xml");
}
diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h
index d23003554..17330f8ca 100644
--- a/indra/newview/llfloaterdaycycle.h
+++ b/indra/newview/llfloaterdaycycle.h
@@ -99,10 +99,30 @@ public:
/// delete a key frame
static void onDeleteKey(void* userData);
- /// button to load day
+ /// when user hits the load preset button
+ static void onNewPreset(void* userData);
+
+ /// when user hits the save preset button
+ static void onSavePreset(void* userData);
+
+ /// prompts a user when overwriting a preset
+ static bool saveAlertCallback(const LLSD& notification, const LLSD& response);
+
+ /// when user hits the save preset button
+ static void onDeletePreset(void* userData);
+
+ /// prompts a user when overwriting a preset
+ bool deleteAlertCallback(const LLSD& notification, const LLSD& response);
+
+ static bool newPromptCallback(const LLSD& notification, const LLSD& response);
+
+ /// what to do when you change the preset name
+ static void onChangePresetName(LLUICtrl* ctrl, void* userData);
+
+ /// button to load day OLD -HgB
static void onLoadDayCycle(void* userData);
- /// button to save day
+ /// button to save day OLD -HgB
static void onSaveDayCycle(void* userData);
/// toggle for Linden time
@@ -140,6 +160,9 @@ private:
// map of sliders to parameters
static std::map sSliderToKey;
+ //Presets default
+ static std::set sDefaultPresets;
+
static const F32 sHoursPerDay;
};
diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp
index c8599db3b..275e48d17 100644
--- a/indra/newview/llfloaterfriends.cpp
+++ b/indra/newview/llfloaterfriends.cpp
@@ -241,12 +241,11 @@ void LLPanelFriends::populateContactGroupSelect()
void LLPanelFriends::setContactGroup(std::string contact_grp)
{
- if (contact_grp != "All")
- {
- filterContacts();
- categorizeContacts();
- }
- else refreshNames(LLFriendObserver::ADD);
+ LLChat msg("Group set to " + contact_grp);
+ LLFloaterChat::addChat(msg);
+ refreshNames(LLFriendObserver::ADD);
+ refreshUI();
+ categorizeContacts();
}
void LLPanelFriends::categorizeContacts()
@@ -264,17 +263,45 @@ void LLPanelFriends::categorizeContacts()
std::vector vFriends = mFriendsList->getAllData(); // all of it.
for (std::vector::iterator itr = vFriends.begin(); itr != vFriends.end(); ++itr)
{
- BOOL show_entry = (contact_groups[group_name][(*itr)->getUUID().asString()].size() != 0);
+ BOOL show_entry = false;//contact_groups[group_name].has((*itr)->getUUID().asString());
+
+ S32 count = contact_groups[group_name].size();
+ int i;
+ for(i = 0; i < count; i++)
+ {
+ if (contact_groups[group_name][i].asString() == (*itr)->getUUID().asString())
+ {
+ show_entry = true;
+ break;
+ }
+ }
if (!show_entry)
{
+ LLChat msg("False: contact_groups['" + group_name + "'].has('" + (*itr)->getUUID().asString() + "');");
+ LLFloaterChat::addChat(msg);
mFriendsList->deleteItems((*itr)->getValue());
}
+ else
+ {
+ LLChat msg("True: contact_groups['" + group_name + "'].has('" + (*itr)->getUUID().asString() + "');");
+ LLFloaterChat::addChat(msg);
+ }
}
}
+ else
+ {
+ LLChat msg("Group set to all.");
+ LLFloaterChat::addChat(msg);
+ }
refreshUI();
}
+ else
+ {
+ LLChat msg("Null combo.");
+ LLFloaterChat::addChat(msg);
+ }
}
void LLPanelFriends::filterContacts()
@@ -325,10 +352,7 @@ void LLPanelFriends::onChangeContactGroup(LLUICtrl* ctrl, void* user_data)
if(panelp)
{
LLComboBox* combo = panelp->getChild("buddy_group_combobox");
- if (combo->getValue().asString() != "All")
- {
- panelp->setContactGroup(combo->getValue().asString());
- }
+ panelp->setContactGroup(combo->getValue().asString());
}
}
// --
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 910ef8c4f..b657a5c14 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -2050,6 +2050,18 @@ void LLFloaterIMPanel::sendMsg()
utf8text.insert(0,"[[");
}
}
+ // Convert MU*s style poses into IRC emotes here.
+ if (gSavedSettings.getBOOL("AscentAllowMUpose") && utf8text.find(":") == 0 && utf8text.length() > 3)
+ {
+ if (utf8text.find(":'") == 0)
+ {
+ utf8text.replace(0, 1, "/me");
+ }
+ else if (isalpha(utf8text.at(1))) // Do not prevent smileys and such.
+ {
+ utf8text.replace(0, 1, "/me ");
+ }
+ }
utf8text = utf8str_truncate(utf8text, MAX_MSG_BUF_SIZE - 1);
if ( mSessionInitialized )
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index c019c33fe..20657e64d 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -118,7 +118,7 @@ void dec_busy_count()
// Function declarations
struct LLWearableHoldingPattern;
-void wear_inventory_category_on_avatar(LLInventoryCategory* category, BOOL append);
+void wear_inventory_category_on_avatar(LLInventoryCategory* category, BOOL append, BOOL replace = FALSE);
void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata);
void wear_inventory_category_on_avatar_loop(LLWearable* wearable, void*);
void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, BOOL append);
@@ -183,6 +183,7 @@ struct LLWearInfo
{
LLUUID mCategoryID;
BOOL mAppend;
+ BOOL mReplace;
};
@@ -2106,6 +2107,10 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model
{
modifyOutfit(TRUE);
}
+ else if ("wearitems" == action)
+ {
+ modifyOutfit(TRUE, TRUE);
+ }
else if ("removefromoutfit" == action)
{
// derf
@@ -2495,6 +2500,7 @@ void LLFolderBridge::folderOptionsMenu()
{
//
mItems.push_back(std::string("Add To Outfit"));
+ mItems.push_back(std::string("Wear Items"));
mItems.push_back(std::string("Replace Outfit"));
//
}
@@ -2857,7 +2863,7 @@ void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
LLPointer(NULL));
}
-void LLFolderBridge::modifyOutfit(BOOL append)
+void LLFolderBridge::modifyOutfit(BOOL append, BOOL replace)
{
// derf
if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end())
@@ -2871,7 +2877,7 @@ void LLFolderBridge::modifyOutfit(BOOL append)
LLViewerInventoryCategory* cat = getCategory();
if(!cat) return;
- wear_inventory_category_on_avatar( cat, append );
+ wear_inventory_category_on_avatar(cat, append, replace);
}
// helper stuff
@@ -4791,7 +4797,7 @@ void wear_inventory_category(LLInventoryCategory* category, bool copy, bool appe
}
// *NOTE: hack to get from avatar inventory to avatar
-void wear_inventory_category_on_avatar( LLInventoryCategory* category, BOOL append )
+void wear_inventory_category_on_avatar(LLInventoryCategory* category, BOOL append, BOOL replace)
{
// Avoid unintentionally overwriting old wearables. We have to do
// this up front to avoid having to deal with the case of multiple
@@ -4802,6 +4808,7 @@ void wear_inventory_category_on_avatar( LLInventoryCategory* category, BOOL appe
LLWearInfo* userdata = new LLWearInfo;
userdata->mAppend = append;
+ userdata->mReplace = replace;
userdata->mCategoryID = category->getUUID();
if( gFloaterCustomize )
@@ -4999,7 +5006,7 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata )
msg->nextBlockFast(_PREHASH_ObjectData );
msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner());
- msg->addU8Fast(_PREHASH_AttachmentPt, 0 | ATTACHMENT_ADD); // Wear at the previous or default attachment point
+ msg->addU8Fast(_PREHASH_AttachmentPt, wear_info->mReplace ? 0 : ATTACHMENT_ADD); // Wear at the previous or default attachment point
pack_permissions_slam(msg, item->getFlags(), item->getPermissions());
msg->addStringFast(_PREHASH_Name, item->getName());
msg->addStringFast(_PREHASH_Description, item->getDescription());
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 8f9226a8f..a99168583 100755
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -344,7 +344,7 @@ protected:
BOOL checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& typeToCheck);
- void modifyOutfit(BOOL append);
+ void modifyOutfit(BOOL append, BOOL replace = FALSE);
public:
static LLFolderBridge* sSelf;
static void staticFolderOptionsMenu();
diff --git a/indra/newview/llsavedsettingsglue.cpp b/indra/newview/llsavedsettingsglue.cpp
index e6feae31d..b2de7edaf 100644
--- a/indra/newview/llsavedsettingsglue.cpp
+++ b/indra/newview/llsavedsettingsglue.cpp
@@ -182,4 +182,4 @@ void gCOASavedSettings->setColor4(const std::string &name, LLColor4 value)
gSavedSettings.setColor4(name, value);
else
gSavedPerAccountSettings.setColor4(name, value);
-}*/
\ No newline at end of file
+}*/
diff --git a/indra/newview/llsavedsettingsglue.h b/indra/newview/llsavedsettingsglue.h
index 2d4b10d51..06799ec63 100644
--- a/indra/newview/llsavedsettingsglue.h
+++ b/indra/newview/llsavedsettingsglue.h
@@ -41,8 +41,7 @@ class LLUICtrl;
// and assign the control name as a const char* to the userdata.
class LLSavedSettingsGlue
{
-public:
-/*
+public:/*
static void setBOOL(LLUICtrl* ctrl, void* name);
static void setS32(LLUICtrl* ctrl, void* name);
static void setF32(LLUICtrl* ctrl, void* name);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 2418d1e12..56e2713c4 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -193,11 +193,13 @@
#include "llsocks5.h"
#include "jcfloaterareasearch.h"
+
//
#include "llpanellogin.h"
//#include "llfloateravatars.h"
//#include "llactivation.h"
#include "wlfPanel_AdvSettings.h" //Lower right Windlight and Rendering options
+#include "ascentdaycyclemanager.h"
#include "llao.h"
#include "llfloaterblacklist.h"
#include "scriptcounter.h"
@@ -2528,6 +2530,7 @@ bool idle_startup()
// init the shader managers
LLPostProcess::initClass();
LLWLParamManager::initClass();
+ AscentDayCycleManager::initClass();
LLWaterParamManager::initClass();
// RN: don't initialize VO classes in drone mode, they are too closely tied to rendering
@@ -2638,9 +2641,10 @@ bool idle_startup()
/*if (gSavedSettings.getBOOL("BeaconAlwaysOn"))
{
- LLFloaterBeacons::showInstance(); DIE
+ LLFloaterBeacons::showInstance(); DIE -HgB
}*/
+
if (!gNoRender)
{
//Set up cloud rendertypes. Passed argument is unused.
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 9deaa58dd..ffca05686 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -1039,8 +1039,6 @@ LLXMLNodePtr LLTextureCtrl::getXML(bool save_children) const
node->createChild("allow_invisible_texture", TRUE)->setBoolValue(mAllowInvisibleTexture);
- node->createChild("allow_invisible_texture", TRUE)->setBoolValue(mAllowInvisibleTexture);
-
node->createChild("can_apply_immediately", TRUE)->setBoolValue(mCanApplyImmediately );
return node;
@@ -1584,5 +1582,3 @@ BOOL LLToolTexEyedropper::handleHover(S32 x, S32 y, MASK mask)
return TRUE;
}
-
-
diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
index e06125032..405c49f9b 100644
--- a/indra/newview/llviewercontrol.h
+++ b/indra/newview/llviewercontrol.h
@@ -54,6 +54,7 @@ extern std::map gSettings;
void create_graphics_group(LLControlGroup& group);
// saved at end of session
+extern LLControlGroup *gCOASavedSettings;
extern LLControlGroup gSavedPerAccountSettings;
// Read-only
@@ -66,10 +67,12 @@ extern LLControlGroup gCrashSettings;
extern std::string gLastRunVersion;
extern std::string gCurrentVersion;
+
bool handleCloudSettingsChanged(const LLSD& newvalue);
//NOTE: LLCachedControl moved to llxml/llcontrol.h make it easier to use in other projects.
+
//A template would be a little awkward to use here.. so.. a preprocessor macro. Alas. onCommitControlSetting(gSavedSettings) etc.
inline void onCommitControlSetting_gSavedSettings(LLUICtrl* ctrl, void* name) {gSavedSettings.setValue((const char*)name,ctrl->getValue());}
inline void onCommitControlSetting_gSavedPerAccountSettings(LLUICtrl* ctrl, void* name) {gSavedPerAccountSettings.setValue((const char*)name,ctrl->getValue());}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5eff25b9f..ab1a4934a 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -39,6 +39,7 @@
#include "llaudioengine.h"
#include "noise.h"
+#include "llsdserialize.h"
#include "llagent.h" // Get state values from here
#include "llviewercontrol.h"
@@ -53,6 +54,7 @@
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
+#include "llinventorybridge.h"
#include "llinventoryview.h"
#include "llkeyframefallmotion.h"
#include "llkeyframestandmotion.h"
@@ -720,6 +722,10 @@ F32 LLVOAvatar::sGreyTime = 0.f;
F32 LLVOAvatar::sGreyUpdateTime = 0.f;
bool LLVOAvatar::sDoProperArc = true;
+// Globals
+LLFrameTimer gAttachmentsTimer;
+bool gAttachmentsListDirty = true;
+
//-----------------------------------------------------------------------------
// Helper functions
//-----------------------------------------------------------------------------
@@ -834,6 +840,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
{
mIsSelf = TRUE;
gAgent.setAvatarObject(this);
+ gAttachmentsTimer.reset();
lldebugs << "Marking avatar as self " << id << llendl;
}
else
@@ -2720,6 +2727,10 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
// attach objects that were waiting for a drawable
lazyAttach();
+ if (mIsSelf)
+ {
+ checkAttachments();
+ }
// animate the character
// store off last frame's root position to be consistent with camera position
@@ -2756,6 +2767,133 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
return TRUE;
}
+void LLVOAvatar::checkAttachments()
+{
+ const F32 LAZY_ATTACH_DELAY = 15.0f;
+ static bool first_run = true;
+
+ if (!mIsSelf)
+ {
+ return;
+ }
+
+ if (mPendingAttachment.size() == 0)
+ {
+ if (first_run)
+ {
+ if (gAttachmentsTimer.getElapsedTimeF32() > LAZY_ATTACH_DELAY)
+ {
+ first_run = false;
+ LLVOAvatar* avatarp = gAgent.getAvatarObject();
+ if (!avatarp) return;
+ std::set worn;
+ for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
+ iter != avatarp->mAttachmentPoints.end(); )
+ {
+ LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+ LLViewerJointAttachment* attachment = curiter->second;
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+ attachment_iter != attachment->mAttachedObjects.end();
+ ++attachment_iter)
+ {
+ LLViewerObject *attached_object = (*attachment_iter);
+ if (attached_object)
+ {
+ worn.insert(attached_object->getAttachmentItemID());
+ }
+ }
+ }
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "attachments.xml");
+ //llinfos << "Reading the saved worn attachments list from: " << filename << llendl;
+ LLSD list;
+ llifstream llsd_xml;
+ llsd_xml.open(filename.c_str(), std::ios::in | std::ios::binary);
+ if (llsd_xml.is_open())
+ {
+ LLSDSerialize::fromXML(list, llsd_xml);
+ for (LLSD::map_iterator iter = list.beginMap(); iter != list.endMap(); iter++)
+ {
+ LLSD array = iter->second;
+ if (array.isArray())
+ {
+ for (int i = 0; i < array.size(); i++)
+ {
+ LLSD map = array[i];
+ if (map.has("inv_item_id"))
+ {
+ LLUUID item_id = map.get("inv_item_id");
+ if (worn.find(item_id) == worn.end())
+ {
+ LLViewerInventoryItem* item = gInventory.getItem(item_id);
+ if (item)
+ {
+ rez_attachment(item, NULL, false);
+ }
+ else
+ {
+ llwarns << item_id.asString() << " not found in inventory, could not reattach." << llendl;
+ }
+ }
+ }
+ else
+ {
+ llwarns << "Malformed attachments list file (no \"inv_item_id\" key). Aborting." << llendl;
+ llsd_xml.close();
+ return;
+ }
+ }
+ }
+ else
+ {
+ llwarns << "Malformed attachments list file (not an array). Aborting." << llendl;
+ llsd_xml.close();
+ return;
+ }
+ }
+ llsd_xml.close();
+ }
+ }
+ }
+ else if (gAttachmentsListDirty)
+ {
+ gAttachmentsListDirty = false;
+ LLSD list;
+ LLSD array = list.emptyArray();
+ LLVOAvatar* avatarp = gAgent.getAvatarObject();
+ if (!avatarp) return;
+ for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
+ iter != avatarp->mAttachmentPoints.end(); )
+ {
+ LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+ LLViewerJointAttachment* attachment = curiter->second;
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+ attachment_iter != attachment->mAttachedObjects.end();
+ ++attachment_iter)
+ {
+ LLViewerObject *attached_object = (*attachment_iter);
+ if (attached_object)
+ {
+ LLSD entry = list.emptyMap();
+ entry.insert("inv_item_id", attached_object->getAttachmentItemID());
+ array.append(entry);
+ }
+ }
+ }
+ list.insert("attachments", array);
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "attachments.xml");
+ llofstream list_file(filename);
+ LLSDSerialize::toPrettyXML(list, list_file);
+ list_file.close();
+ //llinfos << "Worn attachments list saved to: " << filename << llendl;
+ }
+ }
+ else
+ {
+ gAttachmentsListDirty = true;
+ gAttachmentsTimer.reset();
+ }
+}
+
void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)
{
// disable voice visualizer when in mouselook
@@ -3511,9 +3649,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
new_name = TRUE;
}
- LLNameValue *title = getNVPair("Title");
- LLNameValue* firstname = getNVPair("FirstName");
- LLNameValue* lastname = getNVPair("LastName");
//
std::string client;
@@ -3601,41 +3736,35 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
mClientTag = "Friend";
}
}
- }
-
- static LLCachedControl ascent_use_status_colors("AscentUseStatusColors",true);
- if (!mIsSelf && ascent_use_status_colors)
- {
- LLViewerRegion* parent_estate = LLWorld::getInstance()->getRegionFromPosGlobal(this->getPositionGlobal());
- LLUUID estate_owner = LLUUID::null;
- if(parent_estate && parent_estate->isAlive())
+ if (!mIsSelf && gSavedSettings.getBOOL("AscentUseStatusColors"))
{
- estate_owner = parent_estate->getOwner();
- }
-
- std::string name;
- name += firstname->getString();
- name += " ";
- name += lastname->getString();
- //Lindens are always more Linden than your friend, make that take precedence
- if(LLMuteList::getInstance()->isLinden(name))
- {
- mClientColor = gCOASavedSettings->getColor4("AscentLindenColor").getValue();
- }
- //check if they are an estate owner at their current position
- else if(estate_owner.notNull() && this->getID() == estate_owner)
- {
- mClientColor = gCOASavedSettings->getColor4("AscentEstateOwnerColor").getValue();
- }
- //without these dots, SL would suck.
- else if (LLAvatarTracker::instance().getBuddyInfo(this->getID()) != NULL)
- {
- mClientColor = gCOASavedSettings->getColor4("AscentFriendColor");
- }
- //big fat jerkface who is probably a jerk, display them as such.
- else if(LLMuteList::getInstance()->isMuted(this->getID()))
- {
- mClientColor = gCOASavedSettings->getColor4("AscentMutedColor").getValue();
+ LLViewerRegion* parent_estate = LLWorld::getInstance()->getRegionFromPosGlobal(this->getPositionGlobal());
+ LLUUID estate_owner = LLUUID::null;
+ if(parent_estate && parent_estate->isAlive())
+ {
+ estate_owner = parent_estate->getOwner();
+ }
+
+ //Lindens are always more Linden than your friend, make that take precedence
+ if(LLMuteList::getInstance()->isLinden(getFullname()))
+ {
+ mClientColor = gCOASavedSettings->getColor4("AscentLindenColor").getValue();
+ }
+ //check if they are an estate owner at their current position
+ else if(estate_owner.notNull() && this->getID() == estate_owner)
+ {
+ mClientColor = gCOASavedSettings->getColor4("AscentEstateOwnerColor").getValue();
+ }
+ //without these dots, SL would suck.
+ else if (LLAvatarTracker::instance().getBuddyInfo(this->getID()) != NULL)
+ {
+ mClientColor = gCOASavedSettings->getColor4("AscentFriendColor");
+ }
+ //big fat jerkface who is probably a jerk, display them as such.
+ else if(LLMuteList::getInstance()->isMuted(this->getID()))
+ {
+ mClientColor = gCOASavedSettings->getColor4("AscentMutedColor").getValue();
+ }
}
}
@@ -3680,8 +3809,10 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
sNumVisibleChatBubbles--;
}
}
-
-
+
+ LLNameValue *title = getNVPair("Title");
+ LLNameValue* firstname = getNVPair("FirstName");
+ LLNameValue* lastname = getNVPair("LastName");
if (mNameText.notNull() && firstname && lastname)
{
@@ -6968,12 +7099,22 @@ void LLVOAvatar::addChild(LLViewerObject *childp)
{
mPendingAttachment.push_back(childp);
}
+ if (mIsSelf)
+ {
+ gAttachmentsListDirty = true;
+ gAttachmentsTimer.reset();
+ }
}
void LLVOAvatar::removeChild(LLViewerObject *childp)
{
LLViewerObject::removeChild(childp);
detachObject(childp);
+ if (mIsSelf)
+ {
+ gAttachmentsListDirty = true;
+ gAttachmentsTimer.reset();
+ }
}
LLViewerJointAttachment* LLVOAvatar::getTargetAttachmentPoint(LLViewerObject* viewer_object)
@@ -7096,6 +7237,11 @@ void LLVOAvatar::lazyAttach()
if (mPendingAttachment[i]->mDrawable)
{
attachObject(mPendingAttachment[i]);
+ if (mIsSelf)
+ {
+ gAttachmentsListDirty = true;
+ gAttachmentsTimer.reset();
+ }
}
else
{
@@ -7104,6 +7250,11 @@ void LLVOAvatar::lazyAttach()
}
mPendingAttachment = still_pending;
+ if (mIsSelf && still_pending.size() > 0)
+ {
+ gAttachmentsListDirty = true;
+ gAttachmentsTimer.reset();
+ }
}
void LLVOAvatar::resetHUDAttachments()
@@ -9243,7 +9394,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
}
if( param )
{
- llwarns << "Number of params in AvatarAppearance msg does not match number of params in avatar xml file for " << getFullname() << " (Prematurely reached end of list at " << param->getName() << ")." << llendl;
+ if (param->getName() == "tattoo_red")
+ llinfos << getFullname() << " does not have tattoo tinting." << llendl;
+ else
+ llwarns << "Number of params in AvatarAppearance msg does not match number of params in avatar xml file for " << getFullname() << " (Prematurely reached end of list at " << param->getName() << ")." << llendl;
//return; //ASC-TTRFE
}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 82e135593..08077c7cd 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -301,6 +301,7 @@ public:
BOOL attachObject(LLViewerObject *viewer_object);
BOOL detachObject(LLViewerObject *viewer_object);
void lazyAttach();
+ void checkAttachments();
void sitOnObject(LLViewerObject *sit_object);
void getOffObject();
diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp
index 1d17c6047..2abf9d45a 100644
--- a/indra/newview/llwldaycycle.cpp
+++ b/indra/newview/llwldaycycle.cpp
@@ -40,7 +40,9 @@
#include
-LLWLDayCycle::LLWLDayCycle() : mDayRate(120)
+LLWLDayCycle::LLWLDayCycle() :
+ mDayRate(120),
+ mName("Unnamed Cycle")
{
}
@@ -54,22 +56,39 @@ void LLWLDayCycle::loadDayCycle(const std::string & fileName)
// clear the first few things
mTimeMap.clear();
- // now load the file
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
- "windlight/days", fileName));
- llinfos << "Loading DayCycle settings from " << pathName << llendl;
-
- llifstream day_cycle_xml(pathName);
- if (day_cycle_xml.is_open())
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_escape(fileName.c_str(), fileName.size());
+ std::string escaped_filename(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ escaped_filename += ".xml";
+
+ std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", escaped_filename));
+ llinfos << "Loading Day Cycle preset from " << pathName << llendl;
+
+ llifstream day_cycle_xml;
+ day_cycle_xml.open(pathName.c_str());
+
+ // That failed, try loading from the users area instead.
+ if(!day_cycle_xml)
+ {
+ pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", escaped_filename);
+ llinfos << "Loading User Day Cycle preset from " << pathName << llendl;
+ day_cycle_xml.open(pathName.c_str());
+ }
+
+ if (day_cycle_xml)
{
// load and parse it
LLSD day_data(LLSD::emptyArray());
LLPointer parser = new LLSDXMLParser();
parser->parse(day_cycle_xml, day_data, LLSDSerialize::SIZE_UNLIMITED);
-
+ llinfos << "Loading day cycle into timeline..." << llendl;
// add each key
for(S32 i = 0; i < day_data.size(); ++i)
{
+ llinfos << "Loading value" << i << llendl;
// make sure it's a two array
if(day_data[i].size() != 2)
{
@@ -95,14 +114,39 @@ void LLWLDayCycle::loadDayCycle(const std::string & fileName)
day_cycle_xml.close();
}
+ else
+ {
+ llwarns << "Can't find " << fileName << llendl;
+ return;
+ }
}
void LLWLDayCycle::saveDayCycle(const std::string & fileName)
{
- LLSD day_data(LLSD::emptyArray());
+
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_escape(fileName.c_str(), fileName.size());
+ std::string escaped_filename(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", fileName));
- //llinfos << "Saving WindLight settings to " << pathName << llendl;
+ escaped_filename += ".xml";
+
+ std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", escaped_filename));
+ llinfos << "Saving Day Cycle preset from " << pathName << llendl;
+
+ llofstream day_cycle_xml;
+ day_cycle_xml.open(pathName.c_str());
+
+ // That failed, try loading from the users area instead.
+ if(!day_cycle_xml)
+ {
+ pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", escaped_filename);
+ llinfos << "Saving User Day Cycle preset from " << pathName << llendl;
+ day_cycle_xml.open(pathName.c_str());
+ }
+
+ LLSD day_data(LLSD::emptyArray());
for(std::map::const_iterator mIt = mTimeMap.begin();
mIt != mTimeMap.end();
@@ -114,7 +158,6 @@ void LLWLDayCycle::saveDayCycle(const std::string & fileName)
day_data.append(key);
}
- llofstream day_cycle_xml(pathName);
LLPointer formatter = new LLSDXMLFormatter();
formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
day_cycle_xml.close();
diff --git a/indra/newview/llwldaycycle.h b/indra/newview/llwldaycycle.h
index f045a6d1b..d886317a2 100644
--- a/indra/newview/llwldaycycle.h
+++ b/indra/newview/llwldaycycle.h
@@ -45,6 +45,9 @@ class LLWLDayCycle;
class LLWLDayCycle
{
+
+public:
+ std::string mName;
public:
// lists what param sets are used when during the day
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index b8a2bf0bd..c4d146664 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -553,7 +553,7 @@ LLWLParamManager * LLWLParamManager::instance()
sInstance->loadPresets(LLStringUtil::null);
// load the day
- sInstance->mDay.loadDayCycle(std::string("Default.xml"));
+ sInstance->mDay.loadDayCycle(gSavedSettings.getString("AscentActiveDayCycle"));
// *HACK - sets cloud scrolling to what we want... fix this better in the future
sInstance->getParamSet("Default", sInstance->mCurParams);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 1df0ebdb4..9504cb2a0 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -5957,8 +5957,8 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
(1<
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en-us/floater_day_cycle_options.xml
index 84812b9de..ab31d1ea6 100644
--- a/indra/newview/skins/default/xui/en-us/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_day_cycle_options.xml
@@ -237,14 +237,36 @@
label="Use Estate Time" label_selected="Go to Estate Time"
left_delta="55" mouse_opaque="true" name="WLUseLindenTime"
scale_image="true" width="140" />
-