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 - Comment - Active folder for the Uploader - Persist - 1 - Type - String - Value - None + Comment + Settings for upload browser + Type + LLSD + Value + + ActivePath + None + 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" /> -