diff options
Diffstat (limited to 'linden/indra')
55 files changed, 1283 insertions, 163 deletions
diff --git a/linden/indra/cmake/00-Common.cmake b/linden/indra/cmake/00-Common.cmake index 032a3cf..0e90073 100644 --- a/linden/indra/cmake/00-Common.cmake +++ b/linden/indra/cmake/00-Common.cmake | |||
@@ -186,8 +186,8 @@ if (DARWIN) | |||
186 | add_definitions(-DLL_DARWIN=1) | 186 | add_definitions(-DLL_DARWIN=1) |
187 | set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first") | 187 | set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first") |
188 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") | 188 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") |
189 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch") | 189 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch -msse3 -msse4.1 -msse4.2 -mssse3 -w") |
190 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch") | 190 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch -msse3 -msse4.1 -msse4.2 -mssse3 -w") |
191 | # NOTE: it's critical that the optimization flag is put in front. | 191 | # NOTE: it's critical that the optimization flag is put in front. |
192 | # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. | 192 | # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. |
193 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") | 193 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") |
diff --git a/linden/indra/cmake/Python.cmake b/linden/indra/cmake/Python.cmake index 0901c1b..e4257f4 100644 --- a/linden/indra/cmake/Python.cmake +++ b/linden/indra/cmake/Python.cmake | |||
@@ -9,10 +9,12 @@ if (WINDOWS) | |||
9 | NAMES python25.exe python23.exe python.exe | 9 | NAMES python25.exe python23.exe python.exe |
10 | NO_DEFAULT_PATH # added so that cmake does not find cygwin python | 10 | NO_DEFAULT_PATH # added so that cmake does not find cygwin python |
11 | PATHS | 11 | PATHS |
12 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] | ||
12 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] | 13 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] |
13 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] | 14 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] |
14 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] | 15 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] |
15 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] | 16 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] |
17 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] | ||
16 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] | 18 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] |
17 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] | 19 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] |
18 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] | 20 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] |
diff --git a/linden/indra/cmake/Variables.cmake b/linden/indra/cmake/Variables.cmake index 5d4dffe..8a06133 100644 --- a/linden/indra/cmake/Variables.cmake +++ b/linden/indra/cmake/Variables.cmake | |||
@@ -60,17 +60,11 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") | |||
60 | # set this dynamically from the build system now - | 60 | # set this dynamically from the build system now - |
61 | # NOTE: wont have a distributable build unless you add this on the configure line with: | 61 | # NOTE: wont have a distributable build unless you add this on the configure line with: |
62 | # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' | 62 | # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' |
63 | #set(CMAKE_OSX_ARCHITECTURES i386;ppc) | 63 | set(CMAKE_OSX_ARCHITECTURES i386) |
64 | set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk) | 64 | set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) |
65 | if (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") | 65 | if (CMAKE_OSX_ARCHITECTURES MATCHES "i386") |
66 | set(ARCH universal) | 66 | set(ARCH i386) |
67 | else (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") | 67 | endif (CMAKE_OSX_ARCHITECTURES MATCHES "i386") |
68 | if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") | ||
69 | set(ARCH ppc) | ||
70 | else (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") | ||
71 | set(ARCH i386) | ||
72 | endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") | ||
73 | endif (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") | ||
74 | set(LL_ARCH ${ARCH}_darwin) | 68 | set(LL_ARCH ${ARCH}_darwin) |
75 | set(LL_ARCH_DIR universal-darwin) | 69 | set(LL_ARCH_DIR universal-darwin) |
76 | endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") | 70 | endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
diff --git a/linden/indra/develop.py b/linden/indra/develop.py index 809ac78..2ce9f91 100755 --- a/linden/indra/develop.py +++ b/linden/indra/develop.py | |||
@@ -421,7 +421,7 @@ class DarwinSetup(UnixSetup): | |||
421 | type=self.build_type.upper() | 421 | type=self.build_type.upper() |
422 | ) | 422 | ) |
423 | if self.unattended == 'ON': | 423 | if self.unattended == 'ON': |
424 | args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386;ppc\'' | 424 | args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386\'' |
425 | #if simple: | 425 | #if simple: |
426 | # return 'cmake %(opts)s %(dir)r' % args | 426 | # return 'cmake %(opts)s %(dir)r' % args |
427 | return ('cmake -G %(generator)r ' | 427 | return ('cmake -G %(generator)r ' |
diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h index 7db62bc..3c6cd43 100644 --- a/linden/indra/llcommon/llstring.h +++ b/linden/indra/llcommon/llstring.h | |||
@@ -870,6 +870,7 @@ void LLStringUtilBase<T>::addCRLF(std::basic_string<T>& string) | |||
870 | } | 870 | } |
871 | 871 | ||
872 | string.assign(t, size); | 872 | string.assign(t, size); |
873 | delete[] t; | ||
873 | } | 874 | } |
874 | } | 875 | } |
875 | 876 | ||
diff --git a/linden/indra/llimage/llimage.h b/linden/indra/llimage/llimage.h index 2bc62fb..fd8d128 100644 --- a/linden/indra/llimage/llimage.h +++ b/linden/indra/llimage/llimage.h | |||
@@ -73,7 +73,13 @@ typedef enum e_image_codec | |||
73 | IMG_CODEC_JPEG = 5, | 73 | IMG_CODEC_JPEG = 5, |
74 | IMG_CODEC_DXT = 6, | 74 | IMG_CODEC_DXT = 6, |
75 | IMG_CODEC_PNG = 7, | 75 | IMG_CODEC_PNG = 7, |
76 | #ifdef LL_DARWIN | ||
77 | IMG_CODEC_PSD = 8, | ||
78 | IMG_CODEC_TIFF = 9, | ||
79 | IMG_CODEC_EOF = 10 | ||
80 | #else | ||
76 | IMG_CODEC_EOF = 8 | 81 | IMG_CODEC_EOF = 8 |
82 | #endif | ||
77 | } EImageCodec; | 83 | } EImageCodec; |
78 | 84 | ||
79 | //============================================================================ | 85 | //============================================================================ |
diff --git a/linden/indra/llrender/llfontregistry.cpp b/linden/indra/llrender/llfontregistry.cpp index 9792a91..c5923cd 100644 --- a/linden/indra/llrender/llfontregistry.cpp +++ b/linden/indra/llrender/llfontregistry.cpp | |||
@@ -442,7 +442,15 @@ LLFontGL *LLFontRegistry::createFont(const LLFontDescriptor& desc) | |||
442 | std::string font_path = local_path + *file_name_it; | 442 | std::string font_path = local_path + *file_name_it; |
443 | BOOL is_fallback = !is_first_found; | 443 | BOOL is_fallback = !is_first_found; |
444 | F32 size_mult = (is_fallback ? 1 : match_desc->getSizeMult()); | 444 | F32 size_mult = (is_fallback ? 1 : match_desc->getSizeMult()); |
445 | F32 size = (F32)llround(point_size * size_mult); | 445 | if (gSavedSettings.getF32("FontSizeMultiplier") > 0) |
446 | { | ||
447 | size_mult *= gSavedSettings.getF32("FontSizeMultiplier"); | ||
448 | } | ||
449 | F32 size = (F32)(point_size * size_mult); | ||
450 | if (gSavedSettings.getBOOL("FontSizeRounding")) | ||
451 | { | ||
452 | size = (F32)llround(size); | ||
453 | } | ||
446 | if (!fontp->loadFace(font_path, size, | 454 | if (!fontp->loadFace(font_path, size, |
447 | LLFontGL::sVertDPI, LLFontGL::sHorizDPI, 2, is_fallback)) | 455 | LLFontGL::sVertDPI, LLFontGL::sHorizDPI, 2, is_fallback)) |
448 | { | 456 | { |
diff --git a/linden/indra/llui/llnotifications.cpp b/linden/indra/llui/llnotifications.cpp index 2459110..4d3ff46 100644 --- a/linden/indra/llui/llnotifications.cpp +++ b/linden/indra/llui/llnotifications.cpp | |||
@@ -1190,13 +1190,13 @@ void replaceSubstitutionStrings(LLXMLNodePtr node, StringMap& replacements) | |||
1190 | if (found != replacements.end()) | 1190 | if (found != replacements.end()) |
1191 | { | 1191 | { |
1192 | replacement = found->second; | 1192 | replacement = found->second; |
1193 | //llwarns << "replaceSubstituionStrings: value: " << value << " repl: " << replacement << llendl; | 1193 | //llinfos << "replaceSubstitutionStrings: value: \"" << value << "\" repl: \"" << replacement << "\"." << llendl; |
1194 | 1194 | ||
1195 | it->second->setValue(replacement); | 1195 | it->second->setValue(replacement); |
1196 | } | 1196 | } |
1197 | else | 1197 | else |
1198 | { | 1198 | { |
1199 | llwarns << "replaceSubstituionStrings FAILURE: value: " << value << " repl: " << replacement << llendl; | 1199 | llwarns << "replaceSubstitutionStrings FAILURE: could not find replacement \"" << value << "\"." << llendl; |
1200 | } | 1200 | } |
1201 | } | 1201 | } |
1202 | } | 1202 | } |
diff --git a/linden/indra/llvfs/lldir_mac.cpp b/linden/indra/llvfs/lldir_mac.cpp index 6d5dcf3..b2d9787 100644 --- a/linden/indra/llvfs/lldir_mac.cpp +++ b/linden/indra/llvfs/lldir_mac.cpp | |||
@@ -173,7 +173,7 @@ LLDir_Mac::LLDir_Mac() | |||
173 | if (error == noErr) | 173 | if (error == noErr) |
174 | { | 174 | { |
175 | FSRefToLLString(&cacheDirRef, mOSCacheDir); | 175 | FSRefToLLString(&cacheDirRef, mOSCacheDir); |
176 | (void)CFCreateDirectory(&cacheDirRef, CFSTR("Imprudence"),NULL); | 176 | (void)CFCreateDirectory(&cacheDirRef, CFSTR("ImprudenceExperimental"),NULL); |
177 | } | 177 | } |
178 | 178 | ||
179 | // mOSUserAppDir | 179 | // mOSUserAppDir |
diff --git a/linden/indra/llvfs/llvfs.cpp b/linden/indra/llvfs/llvfs.cpp index 7df2a81..9bf5b59 100644 --- a/linden/indra/llvfs/llvfs.cpp +++ b/linden/indra/llvfs/llvfs.cpp | |||
@@ -583,8 +583,9 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename | |||
583 | } | 583 | } |
584 | } | 584 | } |
585 | 585 | ||
586 | LL_WARNS("VFS") << "Using index file " << mIndexFilename << LL_ENDL; | 586 | // Success! |
587 | LL_WARNS("VFS") << "Using data file " << mDataFilename << LL_ENDL; | 587 | LL_INFOS("VFS") << "Using index file " << mIndexFilename << LL_ENDL; |
588 | LL_INFOS("VFS") << "Using data file " << mDataFilename << LL_ENDL; | ||
588 | 589 | ||
589 | mValid = VFSVALID_OK; | 590 | mValid = VFSVALID_OK; |
590 | } | 591 | } |
diff --git a/linden/indra/llwindow/llwindowmacosx-objc.mm b/linden/indra/llwindow/llwindowmacosx-objc.mm index 5f33764..abe8c5d 100644 --- a/linden/indra/llwindow/llwindowmacosx-objc.mm +++ b/linden/indra/llwindow/llwindowmacosx-objc.mm | |||
@@ -58,29 +58,44 @@ BOOL decodeImageQuartz(const UInt8* data, int len, LLImageRaw *raw_image) | |||
58 | UInt8* bitmap = (UInt8*)CFDataGetBytePtr(result); | 58 | UInt8* bitmap = (UInt8*)CFDataGetBytePtr(result); |
59 | 59 | ||
60 | CGImageAlphaInfo format = CGImageGetAlphaInfo(image_ref); | 60 | CGImageAlphaInfo format = CGImageGetAlphaInfo(image_ref); |
61 | if (format & kCGImageAlphaPremultipliedFirst) | 61 | if (format != kCGImageAlphaNone) |
62 | { | 62 | { |
63 | vImage_Buffer vb; | 63 | vImage_Buffer vb; |
64 | vb.data = bitmap; | 64 | vb.data = bitmap; |
65 | vb.height = height; | 65 | vb.height = height; |
66 | vb.width = width; | 66 | vb.width = width; |
67 | vb.rowBytes = bytes_per_row; | 67 | vb.rowBytes = bytes_per_row; |
68 | llinfos << "Unpremultiplying ARGB888" << llendl; | 68 | |
69 | vImageUnpremultiplyData_ARGB8888(&vb, &vb, 0); | 69 | if (format & kCGImageAlphaPremultipliedFirst) |
70 | } | 70 | { |
71 | else if (format & kCGImageAlphaPremultipliedLast) | 71 | // Ele: ARGB -> BGRA on Intel, need to first reorder the bytes, then unpremultiply as RGBA :) |
72 | { | 72 | llinfos << "Unpremultiplying BGRA8888" << llendl; |
73 | vImage_Buffer vb; | 73 | |
74 | vb.data = bitmap; | 74 | for (int i=0; i<height; i++) |
75 | vb.height = height; | 75 | { |
76 | vb.width = width; | 76 | for (int j=0; j<bytes_per_row; j+=4) |
77 | vb.rowBytes = bytes_per_row; | 77 | { |
78 | llinfos << "Unpremultiplying RGBA888" << llendl; | 78 | unsigned char tmp[4]; |
79 | vImageUnpremultiplyData_RGBA8888(&vb, &vb, 0); | 79 | |
80 | tmp[0] = bitmap[j*height+3]; | ||
81 | tmp[1] = bitmap[j*height+2]; | ||
82 | tmp[2] = bitmap[j*height+1]; | ||
83 | tmp[3] = bitmap[j*height]; | ||
84 | |||
85 | memcpy(&bitmap[j*height], &tmp, 4); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | vImageUnpremultiplyData_RGBA8888(&vb, &vb, 0); | ||
90 | } | ||
91 | else if (format & kCGImageAlphaPremultipliedLast) | ||
92 | { | ||
93 | llinfos << "Unpremultiplying RGBA8888" << llendl; | ||
94 | vImageUnpremultiplyData_RGBA8888(&vb, &vb, 0); | ||
95 | } | ||
80 | } | 96 | } |
81 | 97 | ||
82 | raw_image->resize(width, height, comps); | 98 | raw_image->resize(width, height, comps); |
83 | llinfos << "Decoding an image of width: " << width << " and height: " << height << " and components: " << comps << llendl; | ||
84 | memcpy(raw_image->getData(), bitmap, height * bytes_per_row); | 99 | memcpy(raw_image->getData(), bitmap, height * bytes_per_row); |
85 | raw_image->verticalFlip(); | 100 | raw_image->verticalFlip(); |
86 | 101 | ||
diff --git a/linden/indra/lscript/lscript_library/lscript_library.cpp b/linden/indra/lscript/lscript_library/lscript_library.cpp index 68daa50..cc56119 100644 --- a/linden/indra/lscript/lscript_library/lscript_library.cpp +++ b/linden/indra/lscript/lscript_library/lscript_library.cpp | |||
@@ -484,8 +484,9 @@ void LLScriptLibrary::init() | |||
484 | // documented and therefore the description may be incomplete and require further attention. | 484 | // documented and therefore the description may be incomplete and require further attention. |
485 | // OpenSimulator is written in C# and not CPP therefore some values for example "double = float" etc. are different. | 485 | // OpenSimulator is written in C# and not CPP therefore some values for example "double = float" etc. are different. |
486 | 486 | ||
487 | // OSSL corrections and syntax additions added + set in same order as found in OSSL_stub.cs of OpenSim Source (February 19, 2010) | 487 | // OSSL corrections and syntax additions added + set in same order as found in OSSL_stub.cs of OpenSim Source (Updated PM October-21-2010 |
488 | // based on OpenSimulator Ver. 0.6.9 DEV Git # af265e001d3bf043590e480cd6574a14193f6de0 - Rev 12239 | 488 | // based on OpenSimulator Ver. 0.7.x DEV/Master Git # a7acb650d400a280a7b9edabd304376dff9c81af - a7acb65-r/14142 |
489 | // Updates by WhiteStar Magic | ||
489 | 490 | ||
490 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionWaterHeight", NULL, "f", "osSetRegionWaterHeight(float height)\nAdjusts Water Height on region.\n(OpenSim only.)")); | 491 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionWaterHeight", NULL, "f", "osSetRegionWaterHeight(float height)\nAdjusts Water Height on region.\n(OpenSim only.)")); |
491 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionSunSettings", NULL, "iif", "osSetRegionSunSettings(integer useEstateSun, integer sunFixed, float sunHour)\nChanges the Estate Sun Settings, then Triggers a Sun Update\n'sunFixed' TRUE (1) to keep the sun stationary, FALSE (0) to use global time\n'sunHour' The \"Sun Hour\" that is desired, 0...24, with 0 just after SunRise.\n(OpenSim only.)")); | 492 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionSunSettings", NULL, "iif", "osSetRegionSunSettings(integer useEstateSun, integer sunFixed, float sunHour)\nChanges the Estate Sun Settings, then Triggers a Sun Update\n'sunFixed' TRUE (1) to keep the sun stationary, FALSE (0) to use global time\n'sunHour' The \"Sun Hour\" that is desired, 0...24, with 0 just after SunRise.\n(OpenSim only.)")); |
@@ -494,8 +495,11 @@ void LLScriptLibrary::init() | |||
494 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunGetParam","f", "s", "float osSunGetParam(string param)\nReturns current float values for param\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)")); | 495 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunGetParam","f", "s", "float osSunGetParam(string param)\nReturns current float values for param\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)")); |
495 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunSetParam", "sf", NULL, "osSunSetParam(string param, float value)\nSet's Sun Param for SunSet,\nosSunSetParam(day_length, 24.0)\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)")); | 496 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunSetParam", "sf", NULL, "osSunSetParam(string param, float value)\nSet's Sun Param for SunSet,\nosSunSetParam(day_length, 24.0)\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)")); |
496 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindActiveModelPluginName", "s", NULL, "string osWindActiveModelPluginName()\nReturns the Current Working Wind Module Installed\nThese are SimpleRandomWind or ConfigurableWind, optionally others.\n(OpenSim only.)")); | 497 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindActiveModelPluginName", "s", NULL, "string osWindActiveModelPluginName()\nReturns the Current Working Wind Module Installed\nThese are SimpleRandomWind or ConfigurableWind, optionally others.\n(OpenSim only.)")); |
497 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamSet", NULL, "ssf", "osWindParamSet(string plugin, string param, float value)Send Param to Specified Wind Plugin with new value.\n(OpenSim only.)")); | 498 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelJoin", NULL, "vv", "osParcelJoin(vector pos1, vector pos2))\nJoins Parcels @ X,Y coordinates.\n(OpenSim only.)")); |
498 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamGet", "f", "ss", "float osWindParamGet(string plugin, string param)\n Returns Current param from specified Wind Plugin Module.\n(OpenSim only.)")); | 499 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelSubdivide", NULL, "vv", "osParcelSubdivide(vector pos1, vector pos2))\nSubdivides Parcels @ X,Y coordinates.\n(OpenSim only.)")); |
500 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelSetDetails", NULL, "vv", "osParcelSetDetails(vector pos, list rules))\nSet Parcel details.\n(OpenSim only.)")); | ||
501 | // addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamSet", NULL, "ssf", "osWindParamSet(string plugin, string param, float value)Send Param to Specified Wind Plugin with new value.\n(OpenSim only.)")); | ||
502 | // addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamGet", "f", "ss", "float osWindParamGet(string plugin, string param)\n Returns Current param from specified Wind Plugin Module.\n(OpenSim only.)")); | ||
499 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osList2Double", "f", "si", "double osList2Double(list src, int index)\nReturns Double (float) Value from src at index.\n(OpenSim only.)")); | 503 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osList2Double", "f", "si", "double osList2Double(list src, int index)\nReturns Double (float) Value from src at index.\n(OpenSim only.)")); |
500 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURL", NULL, "ssssi", "osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer )\n(OpenSim only.)")); | 504 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURL", NULL, "ssssi", "osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer )\n(OpenSim only.)")); |
501 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureData", NULL, "ssssi", "osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, int timer)\nWrites text and vector graphics onto a prim face.\n(OpenSim only.)")); | 505 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureData", NULL, "ssssi", "osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, int timer)\nWrites text and vector graphics onto a prim face.\n(OpenSim only.)")); |
@@ -564,7 +568,9 @@ void LLScriptLibrary::init() | |||
564 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetSpeed", NULL, "kf", "osSetSpeed(key AVATAR, float SpeedModifier)\nMultiplies the normal running, walking, and flying speed of the specified avatar.\n(OpenSim only.)")); | 568 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetSpeed", NULL, "kf", "osSetSpeed(key AVATAR, float SpeedModifier)\nMultiplies the normal running, walking, and flying speed of the specified avatar.\n(OpenSim only.)")); |
565 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseDamage", NULL, "kf", "osCauseDamage(key AVATAR, float damage)\nCauses damage to specified AVATAR (UUID).\n(OpenSim only.)")); | 569 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseDamage", NULL, "kf", "osCauseDamage(key AVATAR, float damage)\nCauses damage to specified AVATAR (UUID).\n(OpenSim only.)")); |
566 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseHealing", NULL, "kf", "osCauseHealing(key AVATAR, float healing)\nCauses Healing to specified AVATAR (UUID).\n(OpenSim only.)")); | 570 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseHealing", NULL, "kf", "osCauseHealing(key AVATAR, float healing)\nCauses Healing to specified AVATAR (UUID).\n(OpenSim only.)")); |
567 | 571 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osGetPrimitiveParams", "l", "kl", "List osGetPrimitiveParams(key prim, list rules)\nGets primitive Params.\n(OpenSim only.)")); | |
572 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetPrimitiveParams", NULL, "kl", "osSetPrimitiveParams(key prim, list rules)\nSets primitive Params.\n(OpenSim only.)")); | ||
573 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetProjectionParams", NULL, "kikfff", "osSetProjectionParams(key prim. bool projection, key texture, float fov, float focus, float amb)\nSet Projection Paramaters (bool = true / false)\n(OpenSim only.)")); | ||
568 | 574 | ||
569 | // LightShare functions | 575 | // LightShare functions |
570 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "cmSetWindlightScene", "i", "l", "integer cmSetWindlightScene(list rules)\nSet the current WindLight scene. Restricted to estate managers and owners only.")); | 576 | addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "cmSetWindlightScene", "i", "l", "integer cmSetWindlightScene(list rules)\nSet the current WindLight scene. Restricted to estate managers and owners only.")); |
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt index dfd35bf..1a6ad30 100644 --- a/linden/indra/newview/CMakeLists.txt +++ b/linden/indra/newview/CMakeLists.txt | |||
@@ -484,6 +484,7 @@ set(viewer_SOURCE_FILES | |||
484 | panelradarentry.cpp | 484 | panelradarentry.cpp |
485 | pipeline.cpp | 485 | pipeline.cpp |
486 | primbackup.cpp | 486 | primbackup.cpp |
487 | qtoolalign.cpp | ||
487 | rlvhandler.cpp | 488 | rlvhandler.cpp |
488 | rlvhelper.cpp | 489 | rlvhelper.cpp |
489 | rlvcommon.cpp | 490 | rlvcommon.cpp |
@@ -936,6 +937,7 @@ set(viewer_HEADER_FILES | |||
936 | panelradarentry.h | 937 | panelradarentry.h |
937 | pipeline.h | 938 | pipeline.h |
938 | primbackup.h | 939 | primbackup.h |
940 | qtoolalign.h | ||
939 | randgauss.h | 941 | randgauss.h |
940 | rlvdefines.h | 942 | rlvdefines.h |
941 | rlvhandler.h | 943 | rlvhandler.h |
diff --git a/linden/indra/newview/Info-Imprudence.plist b/linden/indra/newview/Info-Imprudence.plist index 419cacd..3fe2000 100644 --- a/linden/indra/newview/Info-Imprudence.plist +++ b/linden/indra/newview/Info-Imprudence.plist | |||
@@ -32,7 +32,7 @@ | |||
32 | </dict> | 32 | </dict> |
33 | </array> | 33 | </array> |
34 | <key>CFBundleVersion</key> | 34 | <key>CFBundleVersion</key> |
35 | <string>Experimental 2010.09.04</string> | 35 | <string>Experimental 2010.10.17</string> |
36 | <key>CSResourcesFileMapped</key> | 36 | <key>CSResourcesFileMapped</key> |
37 | <true/> | 37 | <true/> |
38 | </dict> | 38 | </dict> |
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 3be4ed4..7b37bb6 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml | |||
@@ -4,6 +4,8 @@ | |||
4 | 4 | ||
5 | <!-- Imprudence-specific settings --> | 5 | <!-- Imprudence-specific settings --> |
6 | 6 | ||
7 | <!-- begin name highlighting --> | ||
8 | |||
7 | <key>nick01</key> | 9 | <key>nick01</key> |
8 | <map> | 10 | <map> |
9 | <key>Comment</key> | 11 | <key>Comment</key> |
@@ -102,6 +104,9 @@ | |||
102 | <real>1</real> | 104 | <real>1</real> |
103 | </array> | 105 | </array> |
104 | </map> | 106 | </map> |
107 | |||
108 | <!-- end name highlighting --> | ||
109 | |||
105 | <key>AllowMUpose</key> | 110 | <key>AllowMUpose</key> |
106 | <map> | 111 | <map> |
107 | <key>Comment</key> | 112 | <key>Comment</key> |
@@ -289,6 +294,17 @@ | |||
289 | <key>Value</key> | 294 | <key>Value</key> |
290 | <integer>1</integer> | 295 | <integer>1</integer> |
291 | </map> | 296 | </map> |
297 | <key>FetchInventoryOnLogin</key> | ||
298 | <map> | ||
299 | <key>Comment</key> | ||
300 | <string>Automatically fetch the inventory in the background after login (has issues)</string> | ||
301 | <key>Persist</key> | ||
302 | <integer>1</integer> | ||
303 | <key>Type</key> | ||
304 | <string>Boolean</string> | ||
305 | <key>Value</key> | ||
306 | <integer>0</integer> | ||
307 | </map> | ||
292 | <key>FloaterAnimationListRect</key> | 308 | <key>FloaterAnimationListRect</key> |
293 | <map> | 309 | <map> |
294 | <key>Comment</key> | 310 | <key>Comment</key> |
@@ -380,6 +396,28 @@ | |||
380 | <key>Value</key> | 396 | <key>Value</key> |
381 | <string>DroidSans</string> | 397 | <string>DroidSans</string> |
382 | </map> | 398 | </map> |
399 | <key>FontSizeMultiplier</key> | ||
400 | <map> | ||
401 | <key>Comment</key> | ||
402 | <string>Multiply all font sizes by this amount. Requires viewer restart.</string> | ||
403 | <key>Persist</key> | ||
404 | <integer>1</integer> | ||
405 | <key>Type</key> | ||
406 | <string>F32</string> | ||
407 | <key>Value</key> | ||
408 | <string>1.0</string> | ||
409 | </map> | ||
410 | <key>FontSizeRounding</key> | ||
411 | <map> | ||
412 | <key>Comment</key> | ||
413 | <string>Round all font sizes to integer values, to potentially reduce font blurriness. The rounding occurs after FontSizeMultiplier is applied. Requires viewer restart.</string> | ||
414 | <key>Persist</key> | ||
415 | <integer>1</integer> | ||
416 | <key>Type</key> | ||
417 | <string>Boolean</string> | ||
418 | <key>Value</key> | ||
419 | <integer>0</integer> | ||
420 | </map> | ||
383 | <key>GoAction</key> | 421 | <key>GoAction</key> |
384 | <map> | 422 | <map> |
385 | <key>Comment</key> | 423 | <key>Comment</key> |
diff --git a/linden/indra/newview/app_settings/viewerversion.xml b/linden/indra/newview/app_settings/viewerversion.xml index 2745845..f50b594 100644 --- a/linden/indra/newview/app_settings/viewerversion.xml +++ b/linden/indra/newview/app_settings/viewerversion.xml | |||
@@ -20,6 +20,6 @@ need to be changed manually - MC | |||
20 | <viewer version_patch="0" /> | 20 | <viewer version_patch="0" /> |
21 | 21 | ||
22 | <!--string--> | 22 | <!--string--> |
23 | <viewer version_test="Experimental 2010.10.09" /> | 23 | <viewer version_test="Experimental 2010.10.17" /> |
24 | 24 | ||
25 | </viewer_version> | 25 | </viewer_version> |
diff --git a/linden/indra/newview/floaterlocalassetbrowse.cpp b/linden/indra/newview/floaterlocalassetbrowse.cpp index 443b5bf..991d2fd 100644 --- a/linden/indra/newview/floaterlocalassetbrowse.cpp +++ b/linden/indra/newview/floaterlocalassetbrowse.cpp | |||
@@ -119,6 +119,10 @@ LocalBitmap::LocalBitmap(std::string fullpath) | |||
119 | else if (temp_exten == "tga") { this->extension = IMG_EXTEN_TGA; } | 119 | else if (temp_exten == "tga") { this->extension = IMG_EXTEN_TGA; } |
120 | else if (temp_exten == "jpg" || temp_exten == "jpeg") { this->extension = IMG_EXTEN_JPG; } | 120 | else if (temp_exten == "jpg" || temp_exten == "jpeg") { this->extension = IMG_EXTEN_JPG; } |
121 | else if (temp_exten == "png") { this->extension = IMG_EXTEN_PNG; } | 121 | else if (temp_exten == "png") { this->extension = IMG_EXTEN_PNG; } |
122 | #ifdef LL_DARWIN | ||
123 | else if (temp_exten == "psd") { this->extension = IMG_EXTEN_PSD; } | ||
124 | else if (temp_exten == "tif" || temp_exten == "tiff") { this->extension = IMG_EXTEN_TIFF; } | ||
125 | #endif | ||
122 | else { return; } // no valid extension. | 126 | else { return; } // no valid extension. |
123 | 127 | ||
124 | /* getting file's last modified */ | 128 | /* getting file's last modified */ |
diff --git a/linden/indra/newview/floaterlocalassetbrowse.h b/linden/indra/newview/floaterlocalassetbrowse.h index e02a7d3..69afe98 100644 --- a/linden/indra/newview/floaterlocalassetbrowse.h +++ b/linden/indra/newview/floaterlocalassetbrowse.h | |||
@@ -114,6 +114,10 @@ class LocalBitmap | |||
114 | IMG_EXTEN_TGA, | 114 | IMG_EXTEN_TGA, |
115 | IMG_EXTEN_JPG, | 115 | IMG_EXTEN_JPG, |
116 | IMG_EXTEN_PNG | 116 | IMG_EXTEN_PNG |
117 | #ifdef LL_DARWIN | ||
118 | ,IMG_EXTEN_PSD, | ||
119 | IMG_EXTEN_TIFF | ||
120 | #endif | ||
117 | }; | 121 | }; |
118 | 122 | ||
119 | enum bitmap_type | 123 | enum bitmap_type |
diff --git a/linden/indra/newview/impprefsfonts.cpp b/linden/indra/newview/impprefsfonts.cpp index 3ce71eb..a4dcd34 100644 --- a/linden/indra/newview/impprefsfonts.cpp +++ b/linden/indra/newview/impprefsfonts.cpp | |||
@@ -29,7 +29,9 @@ | |||
29 | #include "llviewerprecompiledheaders.h" | 29 | #include "llviewerprecompiledheaders.h" |
30 | #include "impprefsfonts.h" | 30 | #include "impprefsfonts.h" |
31 | 31 | ||
32 | #include "llcheckboxctrl.h" | ||
32 | #include "llradiogroup.h" | 33 | #include "llradiogroup.h" |
34 | #include "llspinctrl.h" | ||
33 | #include "lluictrlfactory.h" | 35 | #include "lluictrlfactory.h" |
34 | 36 | ||
35 | #include "llviewercontrol.h" | 37 | #include "llviewercontrol.h" |
@@ -61,24 +63,64 @@ void ImpPrefsFonts::refresh() | |||
61 | { | 63 | { |
62 | fonts->setValue( gSavedSettings.getString("FontChoice") ); | 64 | fonts->setValue( gSavedSettings.getString("FontChoice") ); |
63 | } | 65 | } |
66 | |||
67 | LLSpinCtrl* font_mult = getChild<LLSpinCtrl>("font_mult"); | ||
68 | if (font_mult) | ||
69 | { | ||
70 | font_mult->setValue( gSavedSettings.getF32("FontSizeMultiplier") ); | ||
71 | } | ||
72 | |||
73 | LLCheckBoxCtrl* font_round = getChild<LLCheckBoxCtrl>("font_round"); | ||
74 | if (font_round) | ||
75 | { | ||
76 | font_round->setValue( gSavedSettings.getBOOL("FontSizeRounding") ); | ||
77 | } | ||
64 | } | 78 | } |
65 | 79 | ||
66 | void ImpPrefsFonts::apply() | 80 | void ImpPrefsFonts::apply() |
67 | { | 81 | { |
68 | LLRadioGroup* fonts = getChild<LLRadioGroup>("fonts"); | 82 | bool changed = false; |
69 | 83 | ||
84 | LLRadioGroup* fonts = getChild<LLRadioGroup>("fonts"); | ||
70 | if (fonts) | 85 | if (fonts) |
71 | { | 86 | { |
72 | std::string font_choice = fonts->getValue().asString(); | 87 | std::string font_choice = fonts->getValue().asString(); |
73 | |||
74 | if (font_choice != gSavedSettings.getString("FontChoice") && | 88 | if (font_choice != gSavedSettings.getString("FontChoice") && |
75 | !font_choice.empty()) | 89 | !font_choice.empty()) |
76 | { | 90 | { |
77 | gSavedSettings.setString("FontChoice", font_choice); | 91 | gSavedSettings.setString("FontChoice", font_choice); |
78 | LLNotifications::instance().add("ChangeFont"); | 92 | changed = true; |
79 | refresh(); | ||
80 | } | 93 | } |
81 | } | 94 | } |
95 | |||
96 | LLSpinCtrl* font_mult = getChild<LLSpinCtrl>("font_mult"); | ||
97 | if (font_mult) | ||
98 | { | ||
99 | F32 mult = font_mult->getValue().asReal(); | ||
100 | if (mult != gSavedSettings.getF32("FontSizeMultiplier")) | ||
101 | { | ||
102 | gSavedSettings.setF32("FontSizeMultiplier", mult); | ||
103 | changed = true; | ||
104 | } | ||
105 | } | ||
106 | |||
107 | LLCheckBoxCtrl* font_round = getChild<LLCheckBoxCtrl>("font_round"); | ||
108 | if (font_round) | ||
109 | { | ||
110 | BOOL round = font_round->getValue().asBoolean(); | ||
111 | if (round != gSavedSettings.getBOOL("FontSizeRounding")) | ||
112 | { | ||
113 | gSavedSettings.setBOOL("FontSizeRounding", round); | ||
114 | changed = true; | ||
115 | } | ||
116 | } | ||
117 | |||
118 | if (changed) | ||
119 | { | ||
120 | refresh(); | ||
121 | LLNotifications::instance().add("ChangeFont"); | ||
122 | } | ||
123 | |||
82 | } | 124 | } |
83 | 125 | ||
84 | void ImpPrefsFonts::cancel() | 126 | void ImpPrefsFonts::cancel() |
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 4806dda..4485cdf 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp | |||
@@ -440,8 +440,6 @@ static void settings_to_globals() | |||
440 | gMapScale = gSavedSettings.getF32("MapScale"); | 440 | gMapScale = gSavedSettings.getF32("MapScale"); |
441 | LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips"); | 441 | LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips"); |
442 | 442 | ||
443 | LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"); | ||
444 | |||
445 | LLSlider::setScrollWheelMultiplier( gSavedSettings.getS32("SliderScrollWheelMultiplier") ); | 443 | LLSlider::setScrollWheelMultiplier( gSavedSettings.getS32("SliderScrollWheelMultiplier") ); |
446 | 444 | ||
447 | LLHUDEffectLookAt::sDebugLookAt = gSavedSettings.getBOOL("PersistShowLookAt"); | 445 | LLHUDEffectLookAt::sDebugLookAt = gSavedSettings.getBOOL("PersistShowLookAt"); |
@@ -779,6 +777,9 @@ bool LLAppViewer::init() | |||
779 | // | 777 | // |
780 | initWindow(); | 778 | initWindow(); |
781 | 779 | ||
780 | // initWindow also initializes the Feature List, so now we can initialize this global. | ||
781 | LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"); | ||
782 | |||
782 | { | 783 | { |
783 | BOOL download = gSavedSettings.getBOOL("DownloadClientTags"); | 784 | BOOL download = gSavedSettings.getBOOL("DownloadClientTags"); |
784 | 785 | ||
@@ -1174,16 +1175,6 @@ bool LLAppViewer::mainLoop() | |||
1174 | 1175 | ||
1175 | bool LLAppViewer::cleanup() | 1176 | bool LLAppViewer::cleanup() |
1176 | { | 1177 | { |
1177 | //---------------------------------------------- | ||
1178 | //this test code will be removed after the test | ||
1179 | //test manual call stack tracer | ||
1180 | if(gSavedSettings.getBOOL("QAMode")) | ||
1181 | { | ||
1182 | LLError::LLCallStacks::print() ; | ||
1183 | } | ||
1184 | //end of the test code | ||
1185 | //---------------------------------------------- | ||
1186 | |||
1187 | //flag all elements as needing to be destroyed immediately | 1178 | //flag all elements as needing to be destroyed immediately |
1188 | // to ensure shutdown order | 1179 | // to ensure shutdown order |
1189 | LLMortician::setZealous(TRUE); | 1180 | LLMortician::setZealous(TRUE); |
@@ -2704,35 +2695,32 @@ void LLAppViewer::initMarkerFile() | |||
2704 | std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME); | 2695 | std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME); |
2705 | std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME); | 2696 | std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME); |
2706 | 2697 | ||
2707 | |||
2708 | if (LLAPRFile::isExist(mMarkerFileName, LL_APR_RB) && !anotherInstanceRunning()) | 2698 | if (LLAPRFile::isExist(mMarkerFileName, LL_APR_RB) && !anotherInstanceRunning()) |
2709 | { | 2699 | { |
2710 | gLastExecEvent = LAST_EXEC_FROZE; | 2700 | gLastExecEvent = LAST_EXEC_FROZE; |
2711 | LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL; | 2701 | LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL; |
2712 | } | 2702 | } |
2713 | |||
2714 | if(LLAPRFile::isExist(logout_marker_file, LL_APR_RB)) | 2703 | if(LLAPRFile::isExist(logout_marker_file, LL_APR_RB)) |
2715 | { | 2704 | { |
2716 | LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << LL_ENDL; | ||
2717 | gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; | 2705 | gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; |
2706 | LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL; | ||
2707 | LLAPRFile::remove(logout_marker_file); | ||
2718 | } | 2708 | } |
2719 | if(LLAPRFile::isExist(llerror_marker_file, LL_APR_RB)) | 2709 | if(LLAPRFile::isExist(llerror_marker_file, LL_APR_RB)) |
2720 | { | 2710 | { |
2721 | llinfos << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << llendl; | ||
2722 | if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; | 2711 | if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; |
2723 | else gLastExecEvent = LAST_EXEC_LLERROR_CRASH; | 2712 | else gLastExecEvent = LAST_EXEC_LLERROR_CRASH; |
2713 | LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL; | ||
2714 | LLAPRFile::remove(llerror_marker_file); | ||
2724 | } | 2715 | } |
2725 | if(LLAPRFile::isExist(error_marker_file, LL_APR_RB)) | 2716 | if(LLAPRFile::isExist(error_marker_file, LL_APR_RB)) |
2726 | { | 2717 | { |
2727 | LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << LL_ENDL; | ||
2728 | if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; | 2718 | if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; |
2729 | else gLastExecEvent = LAST_EXEC_OTHER_CRASH; | 2719 | else gLastExecEvent = LAST_EXEC_OTHER_CRASH; |
2720 | LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL; | ||
2721 | LLAPRFile::remove(error_marker_file); | ||
2730 | } | 2722 | } |
2731 | 2723 | ||
2732 | LLAPRFile::remove(logout_marker_file); | ||
2733 | LLAPRFile::remove(llerror_marker_file); | ||
2734 | LLAPRFile::remove(error_marker_file); | ||
2735 | |||
2736 | // No new markers if another instance is running. | 2724 | // No new markers if another instance is running. |
2737 | if(anotherInstanceRunning()) | 2725 | if(anotherInstanceRunning()) |
2738 | { | 2726 | { |
@@ -2790,7 +2778,9 @@ void LLAppViewer::forceQuit() | |||
2790 | 2778 | ||
2791 | LL_INFOS("forceQuit") << "Destroying the entire world" << LL_ENDL; | 2779 | LL_INFOS("forceQuit") << "Destroying the entire world" << LL_ENDL; |
2792 | if (mQuitRequested) | 2780 | if (mQuitRequested) |
2793 | LLApp::setQuitting(); | 2781 | { |
2782 | LLApp::setQuitting(); | ||
2783 | } | ||
2794 | else | 2784 | else |
2795 | { | 2785 | { |
2796 | if (mLogoutRequested) //we just finished a logout request | 2786 | if (mLogoutRequested) //we just finished a logout request |
@@ -3750,15 +3740,6 @@ void LLAppViewer::idleShutdown() | |||
3750 | forceQuit(); | 3740 | forceQuit(); |
3751 | } | 3741 | } |
3752 | 3742 | ||
3753 | |||
3754 | static bool saved_snapshot = false; | ||
3755 | if (!saved_snapshot) | ||
3756 | { | ||
3757 | saved_snapshot = true; | ||
3758 | saveFinalSnapshot(); | ||
3759 | return; | ||
3760 | } | ||
3761 | |||
3762 | // Attempt to close all floaters that might be | 3743 | // Attempt to close all floaters that might be |
3763 | // editing things. | 3744 | // editing things. |
3764 | if (gFloaterView) | 3745 | if (gFloaterView) |
diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp index 35613b7..54da31b 100644 --- a/linden/indra/newview/llfeaturemanager.cpp +++ b/linden/indra/newview/llfeaturemanager.cpp | |||
@@ -250,11 +250,9 @@ BOOL LLFeatureManager::loadFeatureTables() | |||
250 | mTableVersion = version; | 250 | mTableVersion = version; |
251 | 251 | ||
252 | LLFeatureList *flp = NULL; | 252 | LLFeatureList *flp = NULL; |
253 | while (!file.eof() && file.good()) | 253 | while (file >> name) |
254 | { | 254 | { |
255 | char buffer[MAX_STRING]; /*Flawfinder: ignore*/ | 255 | char buffer[MAX_STRING]; /*Flawfinder: ignore*/ |
256 | |||
257 | file >> name; | ||
258 | 256 | ||
259 | if (name.substr(0,2) == "//") | 257 | if (name.substr(0,2) == "//") |
260 | { | 258 | { |
@@ -263,13 +261,6 @@ BOOL LLFeatureManager::loadFeatureTables() | |||
263 | continue; | 261 | continue; |
264 | } | 262 | } |
265 | 263 | ||
266 | if (name.empty()) | ||
267 | { | ||
268 | // This is a blank line | ||
269 | file.getline(buffer, MAX_STRING); | ||
270 | continue; | ||
271 | } | ||
272 | |||
273 | if (name == "list") | 264 | if (name == "list") |
274 | { | 265 | { |
275 | if (flp) | 266 | if (flp) |
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp index 40b1abb..a59fa06 100644 --- a/linden/indra/newview/llfilepicker.cpp +++ b/linden/indra/newview/llfilepicker.cpp | |||
@@ -532,12 +532,16 @@ Boolean LLFilePicker::navOpenFilterProc(AEDesc *theItem, void *info, void *callB | |||
532 | { | 532 | { |
533 | if (fileInfo.filetype != 'JPEG' && fileInfo.filetype != 'JPG ' && | 533 | if (fileInfo.filetype != 'JPEG' && fileInfo.filetype != 'JPG ' && |
534 | fileInfo.filetype != 'BMP ' && fileInfo.filetype != 'TGA ' && | 534 | fileInfo.filetype != 'BMP ' && fileInfo.filetype != 'TGA ' && |
535 | fileInfo.filetype != 'TIFF' && fileInfo.filetype != 'PSD ' && | ||
535 | fileInfo.filetype != 'BMPf' && fileInfo.filetype != 'TPIC' && | 536 | fileInfo.filetype != 'BMPf' && fileInfo.filetype != 'TPIC' && |
536 | fileInfo.filetype != 'PNG ' && | 537 | fileInfo.filetype != 'PNG ' && |
537 | (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("jpeg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | 538 | (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("jpeg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && |
538 | CFStringCompare(fileInfo.extension, CFSTR("jpg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | 539 | CFStringCompare(fileInfo.extension, CFSTR("jpg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && |
539 | CFStringCompare(fileInfo.extension, CFSTR("bmp"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | 540 | CFStringCompare(fileInfo.extension, CFSTR("bmp"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && |
540 | CFStringCompare(fileInfo.extension, CFSTR("tga"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | 541 | CFStringCompare(fileInfo.extension, CFSTR("tga"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && |
542 | CFStringCompare(fileInfo.extension, CFSTR("psd"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | ||
543 | CFStringCompare(fileInfo.extension, CFSTR("tiff"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | ||
544 | CFStringCompare(fileInfo.extension, CFSTR("tif"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && | ||
541 | CFStringCompare(fileInfo.extension, CFSTR("png"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) | 545 | CFStringCompare(fileInfo.extension, CFSTR("png"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) |
542 | ) | 546 | ) |
543 | { | 547 | { |
diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp index 9870cf0..9c1d67b 100644 --- a/linden/indra/newview/llfloaterabout.cpp +++ b/linden/indra/newview/llfloaterabout.cpp | |||
@@ -138,7 +138,7 @@ LLFloaterAbout::LLFloaterAbout() | |||
138 | #endif | 138 | #endif |
139 | 139 | ||
140 | #if LL_GNUC | 140 | #if LL_GNUC |
141 | support.append(llformat("Built with GCC version %d\n\n", GCC_VERSION)); | 141 | support.append(llformat("Built with GCC version %s\n\n", __VERSION__)); |
142 | #endif | 142 | #endif |
143 | 143 | ||
144 | // Position | 144 | // Position |
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp index a85ce9d..79e9e31 100644 --- a/linden/indra/newview/llfloatergroups.cpp +++ b/linden/indra/newview/llfloatergroups.cpp | |||
@@ -610,9 +610,9 @@ void LLPanelGroups::applyChangesToGroups() | |||
610 | } | 610 | } |
611 | 611 | ||
612 | // chat | 612 | // chat |
613 | if (join_group_chat != (!gIMMgr->getIgnoreGroup(group_id))) | 613 | if (!join_group_chat != gIMMgr->getIgnoreGroup(group_id)) |
614 | { | 614 | { |
615 | gIMMgr->updateIgnoreGroup(group_id, join_group_chat); | 615 | gIMMgr->updateIgnoreGroup(group_id, !join_group_chat); |
616 | } | 616 | } |
617 | } | 617 | } |
618 | } | 618 | } |
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp index c81081f..8142869 100644 --- a/linden/indra/newview/llfloaterimagepreview.cpp +++ b/linden/indra/newview/llfloaterimagepreview.cpp | |||
@@ -355,6 +355,16 @@ bool LLFloaterImagePreview::loadImage(const std::string& src_filename) | |||
355 | { | 355 | { |
356 | codec = IMG_CODEC_PNG; | 356 | codec = IMG_CODEC_PNG; |
357 | } | 357 | } |
358 | #ifdef LL_DARWIN | ||
359 | else if( exten == "psd" ) | ||
360 | { | ||
361 | codec = IMG_CODEC_PSD; | ||
362 | } | ||
363 | else if( exten == "tif" || exten == "tiff" ) | ||
364 | { | ||
365 | codec = IMG_CODEC_TIFF; | ||
366 | } | ||
367 | #endif | ||
358 | 368 | ||
359 | LLPointer<LLImageRaw> raw_image = new LLImageRaw; | 369 | LLPointer<LLImageRaw> raw_image = new LLImageRaw; |
360 | #ifdef LL_DARWIN | 370 | #ifdef LL_DARWIN |
@@ -434,9 +444,9 @@ bool LLFloaterImagePreview::loadImage(const std::string& src_filename) | |||
434 | return false; | 444 | return false; |
435 | } | 445 | } |
436 | 446 | ||
437 | raw_image->biasedScaleToPowerOfTwo(1024); | ||
438 | #endif | 447 | #endif |
439 | 448 | ||
449 | raw_image->biasedScaleToPowerOfTwo(1024); | ||
440 | mRawImagep = raw_image; | 450 | mRawImagep = raw_image; |
441 | return true; | 451 | return true; |
442 | } | 452 | } |
diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp index 09336cb..f8a0a4f 100644 --- a/linden/indra/newview/llfloaterpreference.cpp +++ b/linden/indra/newview/llfloaterpreference.cpp | |||
@@ -134,8 +134,8 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainer* tab_container, LLButton * def | |||
134 | mMsgPanel(NULL), | 134 | mMsgPanel(NULL), |
135 | mSkinsPanel(NULL), | 135 | mSkinsPanel(NULL), |
136 | mLCDPanel(NULL), | 136 | mLCDPanel(NULL), |
137 | mPrefsAdvanced(NULL), | 137 | mPrefsFonts(NULL), |
138 | mPrefsFonts(NULL) | 138 | mPrefsAdvanced(NULL) |
139 | { | 139 | { |
140 | mGeneralPanel = new LLPanelGeneral(); | 140 | mGeneralPanel = new LLPanelGeneral(); |
141 | mTabContainer->addTabPanel(mGeneralPanel, mGeneralPanel->getLabel(), FALSE, onTabChanged, mTabContainer); | 141 | mTabContainer->addTabPanel(mGeneralPanel, mGeneralPanel->getLabel(), FALSE, onTabChanged, mTabContainer); |
@@ -195,14 +195,14 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainer* tab_container, LLButton * def | |||
195 | mTabContainer->addTabPanel(mSkinsPanel, mSkinsPanel->getLabel(), FALSE, onTabChanged, mTabContainer); | 195 | mTabContainer->addTabPanel(mSkinsPanel, mSkinsPanel->getLabel(), FALSE, onTabChanged, mTabContainer); |
196 | mSkinsPanel->setDefaultBtn(default_btn); | 196 | mSkinsPanel->setDefaultBtn(default_btn); |
197 | 197 | ||
198 | mPrefsAdvanced = new LLPrefsAdvanced(); | ||
199 | mTabContainer->addTabPanel(mPrefsAdvanced, mPrefsAdvanced->getLabel(), FALSE, onTabChanged, mTabContainer); | ||
200 | mPrefsAdvanced->setDefaultBtn(default_btn); | ||
201 | |||
202 | mPrefsFonts = new ImpPrefsFonts(); | 198 | mPrefsFonts = new ImpPrefsFonts(); |
203 | mTabContainer->addTabPanel(mPrefsFonts, mPrefsFonts->getLabel(), FALSE, onTabChanged, mTabContainer); | 199 | mTabContainer->addTabPanel(mPrefsFonts, mPrefsFonts->getLabel(), FALSE, onTabChanged, mTabContainer); |
204 | mPrefsFonts->setDefaultBtn(default_btn); | 200 | mPrefsFonts->setDefaultBtn(default_btn); |
205 | 201 | ||
202 | mPrefsAdvanced = new LLPrefsAdvanced(); | ||
203 | mTabContainer->addTabPanel(mPrefsAdvanced, mPrefsAdvanced->getLabel(), FALSE, onTabChanged, mTabContainer); | ||
204 | mPrefsAdvanced->setDefaultBtn(default_btn); | ||
205 | |||
206 | if (!mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab"))) | 206 | if (!mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab"))) |
207 | { | 207 | { |
208 | mTabContainer->selectFirstTab(); | 208 | mTabContainer->selectFirstTab(); |
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp index 50e2480..15f278d 100644 --- a/linden/indra/newview/llfloaterreporter.cpp +++ b/linden/indra/newview/llfloaterreporter.cpp | |||
@@ -361,6 +361,7 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id) | |||
361 | } | 361 | } |
362 | else | 362 | else |
363 | { | 363 | { |
364 | LLSelectMgr::waitForObjectResponse(mObjectID); | ||
364 | // we have to query the simulator for information | 365 | // we have to query the simulator for information |
365 | // about this object | 366 | // about this object |
366 | LLMessageSystem* msg = gMessageSystem; | 367 | LLMessageSystem* msg = gMessageSystem; |
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp index c0e972d..a58120d 100644 --- a/linden/indra/newview/llfloatersnapshot.cpp +++ b/linden/indra/newview/llfloatersnapshot.cpp | |||
@@ -2128,7 +2128,6 @@ BOOL LLFloaterSnapshot::postBuild() | |||
2128 | //gSnapshotFloaterView->addChild(this); | 2128 | //gSnapshotFloaterView->addChild(this); |
2129 | 2129 | ||
2130 | impl.updateControls(this); | 2130 | impl.updateControls(this); |
2131 | impl.updateLayout(this); | ||
2132 | 2131 | ||
2133 | return TRUE; | 2132 | return TRUE; |
2134 | } | 2133 | } |
diff --git a/linden/indra/newview/llfloaterteleporthistory.cpp b/linden/indra/newview/llfloaterteleporthistory.cpp index 65675fa..c901029 100644 --- a/linden/indra/newview/llfloaterteleporthistory.cpp +++ b/linden/indra/newview/llfloaterteleporthistory.cpp | |||
@@ -108,6 +108,7 @@ BOOL LLFloaterTeleportHistory::postBuild() | |||
108 | childSetAction("teleport", onTeleport, this); | 108 | childSetAction("teleport", onTeleport, this); |
109 | childSetAction("show_on_map", onShowOnMap, this); | 109 | childSetAction("show_on_map", onShowOnMap, this); |
110 | childSetAction("copy_slurl", onCopySLURL, this); | 110 | childSetAction("copy_slurl", onCopySLURL, this); |
111 | childSetAction("clear_history", onClearHistory,this); | ||
111 | loadEntrys(); | 112 | loadEntrys(); |
112 | 113 | ||
113 | return TRUE; | 114 | return TRUE; |
@@ -121,7 +122,13 @@ void LLFloaterTeleportHistory::saveEntry(LLSD toSave) | |||
121 | LLSDSerialize::toPrettyXML(tpList, file); | 122 | LLSDSerialize::toPrettyXML(tpList, file); |
122 | file.close(); | 123 | file.close(); |
123 | } | 124 | } |
124 | 125 | void LLFloaterTeleportHistory::clearHistory() | |
126 | { | ||
127 | tpList.clear(); | ||
128 | saveEntry(tpList); | ||
129 | mPlacesOutList->clearRows(); | ||
130 | mPlacesInList->clearRows(); | ||
131 | } | ||
125 | std::string LLFloaterTeleportHistory::getFileName() | 132 | std::string LLFloaterTeleportHistory::getFileName() |
126 | { | 133 | { |
127 | std::string path=gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, ""); | 134 | std::string path=gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, ""); |
@@ -303,6 +310,13 @@ void LLFloaterTeleportHistory::onTeleport(void* data) | |||
303 | } | 310 | } |
304 | 311 | ||
305 | // static | 312 | // static |
313 | void LLFloaterTeleportHistory::onClearHistory(void* data) | ||
314 | { | ||
315 | LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data; | ||
316 | self->clearHistory(); | ||
317 | } | ||
318 | |||
319 | // static | ||
306 | void LLFloaterTeleportHistory::onShowOnMap(void* data) | 320 | void LLFloaterTeleportHistory::onShowOnMap(void* data) |
307 | { | 321 | { |
308 | LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data; | 322 | LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data; |
diff --git a/linden/indra/newview/llfloaterteleporthistory.h b/linden/indra/newview/llfloaterteleporthistory.h index e458259..702daf5 100644 --- a/linden/indra/newview/llfloaterteleporthistory.h +++ b/linden/indra/newview/llfloaterteleporthistory.h | |||
@@ -63,9 +63,12 @@ class LLFloaterTeleportHistory : public LLFloater | |||
63 | /// @brief: adds a teleport destination to the list of visited places | 63 | /// @brief: adds a teleport destination to the list of visited places |
64 | void addEntry(std::string regionName, S16 x, S16 y, S16 z,bool outList); | 64 | void addEntry(std::string regionName, S16 x, S16 y, S16 z,bool outList); |
65 | 65 | ||
66 | void clearHistory(); | ||
67 | |||
66 | protected: | 68 | protected: |
67 | static void onInPlacesSelected(LLUICtrl* ctrl, void* data); | 69 | static void onInPlacesSelected(LLUICtrl* ctrl, void* data); |
68 | static void onOutPlacesSelected(LLUICtrl* ctrl, void* data); | 70 | static void onOutPlacesSelected(LLUICtrl* ctrl, void* data); |
71 | static void onClearHistory(void* data); | ||
69 | static void onTeleport(void* data); | 72 | static void onTeleport(void* data); |
70 | static void onShowOnMap(void* data); | 73 | static void onShowOnMap(void* data); |
71 | static void onCopySLURL(void* data); | 74 | static void onCopySLURL(void* data); |
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp index f6f09b1..6744faf 100644 --- a/linden/indra/newview/llfloatertools.cpp +++ b/linden/indra/newview/llfloatertools.cpp | |||
@@ -84,7 +84,7 @@ | |||
84 | #include "llvograss.h" | 84 | #include "llvograss.h" |
85 | #include "llvotree.h" | 85 | #include "llvotree.h" |
86 | #include "lluictrlfactory.h" | 86 | #include "lluictrlfactory.h" |
87 | 87 | #include "qtoolalign.h" | |
88 | #include "hippoLimits.h" | 88 | #include "hippoLimits.h" |
89 | 89 | ||
90 | // Globals | 90 | // Globals |
@@ -273,6 +273,8 @@ BOOL LLFloaterTools::postBuild() | |||
273 | childSetCommitCallback("radio stretch",commit_select_tool,LLToolCompScale::getInstance()); | 273 | childSetCommitCallback("radio stretch",commit_select_tool,LLToolCompScale::getInstance()); |
274 | mRadioSelectFace = getChild<LLCheckBoxCtrl>("radio select face"); | 274 | mRadioSelectFace = getChild<LLCheckBoxCtrl>("radio select face"); |
275 | childSetCommitCallback("radio select face",commit_select_tool,LLToolFace::getInstance()); | 275 | childSetCommitCallback("radio select face",commit_select_tool,LLToolFace::getInstance()); |
276 | mRadioAlign = getChild<LLCheckBoxCtrl>("radio align"); | ||
277 | childSetCommitCallback("radio align",commit_select_tool,QToolAlign::getInstance()); | ||
276 | mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts"); | 278 | mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts"); |
277 | childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts")); | 279 | childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts")); |
278 | childSetCommitCallback("checkbox edit linked parts",commit_select_component,this); | 280 | childSetCommitCallback("checkbox edit linked parts",commit_select_component,this); |
@@ -528,14 +530,54 @@ void LLFloaterTools::refresh() | |||
528 | mTab->enableTabButton(idx_face, all_volume); | 530 | mTab->enableTabButton(idx_face, all_volume); |
529 | mTab->enableTabButton(idx_contents, all_volume); | 531 | mTab->enableTabButton(idx_contents, all_volume); |
530 | 532 | ||
531 | // Refresh object and prim count labels | 533 | // Added in Link Num value -HgB |
532 | LLLocale locale(LLLocale::USER_LOCALE); | 534 | if (gSavedSettings.getBOOL("EditLinkedParts") && LLSelectMgr::getInstance()->getEditSelection()->getObjectCount() == 1) //Selecting a single prim in "Edit Linked" mode, show link number |
533 | std::string obj_count_string; | 535 | { |
534 | LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); | 536 | childSetVisible("obj_count", FALSE); |
535 | childSetTextArg("obj_count", "[COUNT]", obj_count_string); | 537 | childSetVisible("prim_count", FALSE); |
536 | std::string prim_count_string; | 538 | childSetVisible("link_num", TRUE); |
537 | LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount()); | 539 | |
538 | childSetTextArg("prim_count", "[COUNT]", prim_count_string); | 540 | std::string value_string = ""; |
541 | LLViewerObject* selected = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); | ||
542 | if (selected && selected->getRootEdit()) | ||
543 | { | ||
544 | LLViewerObject::child_list_t children = selected->getRootEdit()->getChildren(); | ||
545 | if (children.empty()) | ||
546 | { | ||
547 | // An unlinked prim is "link 0". | ||
548 | value_string = "0"; | ||
549 | } | ||
550 | else | ||
551 | { | ||
552 | children.push_front(selected->getRootEdit()); // need root in the list too | ||
553 | S32 index = 0; | ||
554 | for (LLViewerObject::child_list_t::iterator iter = children.begin(); iter != children.end(); ++iter) | ||
555 | { | ||
556 | index++; | ||
557 | if ((*iter)->isSelected()) | ||
558 | { | ||
559 | LLResMgr::getInstance()->getIntegerString(value_string, index); | ||
560 | break; | ||
561 | } | ||
562 | } | ||
563 | } | ||
564 | } | ||
565 | childSetTextArg("link_num", "[NUMBER]", value_string); | ||
566 | } | ||
567 | else | ||
568 | { | ||
569 | // Refresh object and prim count labels | ||
570 | childSetVisible("obj_count", TRUE); | ||
571 | childSetVisible("prim_count", TRUE); | ||
572 | childSetVisible("link_num", FALSE); | ||
573 | LLLocale locale(LLLocale::USER_LOCALE); | ||
574 | std::string obj_count_string; | ||
575 | LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); | ||
576 | childSetTextArg("obj_count", "[COUNT]", obj_count_string); | ||
577 | std::string prim_count_string; | ||
578 | LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount()); | ||
579 | childSetTextArg("prim_count", "[COUNT]", prim_count_string); | ||
580 | } | ||
539 | 581 | ||
540 | updateToolsPrecision(); | 582 | updateToolsPrecision(); |
541 | 583 | ||
@@ -658,6 +700,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) | |||
658 | tool == LLToolCompScale::getInstance() || | 700 | tool == LLToolCompScale::getInstance() || |
659 | tool == LLToolFace::getInstance() || | 701 | tool == LLToolFace::getInstance() || |
660 | tool == LLToolIndividual::getInstance() || | 702 | tool == LLToolIndividual::getInstance() || |
703 | tool == QToolAlign::getInstance() || | ||
661 | tool == LLToolPipette::getInstance(); | 704 | tool == LLToolPipette::getInstance(); |
662 | 705 | ||
663 | mBtnEdit ->setToggleState( edit_visible ); | 706 | mBtnEdit ->setToggleState( edit_visible ); |
@@ -680,6 +723,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) | |||
680 | mRadioPosition ->set( tool == LLToolCompTranslate::getInstance() ); | 723 | mRadioPosition ->set( tool == LLToolCompTranslate::getInstance() ); |
681 | mRadioRotate ->set( tool == LLToolCompRotate::getInstance() ); | 724 | mRadioRotate ->set( tool == LLToolCompRotate::getInstance() ); |
682 | mRadioStretch ->set( tool == LLToolCompScale::getInstance() ); | 725 | mRadioStretch ->set( tool == LLToolCompScale::getInstance() ); |
726 | mRadioAlign->set( tool == QToolAlign::getInstance() ); | ||
683 | 727 | ||
684 | if (mComboGridMode) | 728 | if (mComboGridMode) |
685 | { | 729 | { |
@@ -887,8 +931,15 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) | |||
887 | childSetVisible("Strength:", land_visible); | 931 | childSetVisible("Strength:", land_visible); |
888 | } | 932 | } |
889 | 933 | ||
890 | childSetVisible("obj_count", !land_visible); | 934 | if (gSavedSettings.getBOOL("EditLinkedParts") && LLSelectMgr::getInstance()->getEditSelection()->getObjectCount() == 1) |
891 | childSetVisible("prim_count", !land_visible); | 935 | { |
936 | childSetVisible("link_num", !land_visible); | ||
937 | } | ||
938 | else | ||
939 | { | ||
940 | childSetVisible("obj_count", !land_visible); | ||
941 | childSetVisible("prim_count", !land_visible); | ||
942 | } | ||
892 | mTab->setVisible(!land_visible); | 943 | mTab->setVisible(!land_visible); |
893 | mPanelLandInfo->setVisible(land_visible); | 944 | mPanelLandInfo->setVisible(land_visible); |
894 | } | 945 | } |
diff --git a/linden/indra/newview/llfloatertools.h b/linden/indra/newview/llfloatertools.h index ad5be6c..bbf07ec 100644 --- a/linden/indra/newview/llfloatertools.h +++ b/linden/indra/newview/llfloatertools.h | |||
@@ -140,6 +140,7 @@ public: | |||
140 | LLCheckBoxCtrl *mRadioRotate; | 140 | LLCheckBoxCtrl *mRadioRotate; |
141 | LLCheckBoxCtrl *mRadioStretch; | 141 | LLCheckBoxCtrl *mRadioStretch; |
142 | LLCheckBoxCtrl *mRadioSelectFace; | 142 | LLCheckBoxCtrl *mRadioSelectFace; |
143 | LLCheckBoxCtrl *mRadioAlign; | ||
143 | 144 | ||
144 | LLCheckBoxCtrl *mCheckSelectIndividual; | 145 | LLCheckBoxCtrl *mCheckSelectIndividual; |
145 | 146 | ||
diff --git a/linden/indra/newview/llgesturemgr.cpp b/linden/indra/newview/llgesturemgr.cpp index c3f7b93..bb678d7 100644 --- a/linden/indra/newview/llgesturemgr.cpp +++ b/linden/indra/newview/llgesturemgr.cpp | |||
@@ -603,6 +603,207 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s | |||
603 | LLWeb::loadURLInternal("http://failbook.failblog.org/"); | 603 | LLWeb::loadURLInternal("http://failbook.failblog.org/"); |
604 | return TRUE; | 604 | return TRUE; |
605 | } | 605 | } |
606 | else if (LLStringUtil::compareInsensitive("/icanhaszombie", cur_token) == 0 || | ||
607 | LLStringUtil::compareInsensitive("/icanhaszombies", cur_token) == 0) | ||
608 | { | ||
609 | LLViewerImage* kitteh = gImageList.getImageFromFile("zombiecat.png", TRUE, TRUE); | ||
610 | if (kitteh) | ||
611 | { | ||
612 | S32 left, top; | ||
613 | gFloaterView->getNewFloaterPosition(&left, &top); | ||
614 | LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); | ||
615 | rect.translate(left - rect.mLeft, top - rect.mTop); | ||
616 | |||
617 | LLPreviewTexture* preview; | ||
618 | preview = new LLPreviewTexture(rect, "Zombiecat!", kitteh); | ||
619 | preview->setSourceID(LLUUID::generateNewID()); | ||
620 | preview->setFocus(TRUE); | ||
621 | preview->center(); | ||
622 | gFloaterView->adjustToFitScreen(preview, FALSE); | ||
623 | } | ||
624 | return TRUE; | ||
625 | } | ||
626 | else if (LLStringUtil::compareInsensitive("/icanhassupport", cur_token) == 0 || | ||
627 | LLStringUtil::compareInsensitive("/icanhashelp", cur_token) == 0 || | ||
628 | LLStringUtil::compareInsensitive("/icanhashalp", cur_token) == 0) | ||
629 | { | ||
630 | LLWeb::loadURLInternal("http://support.imprudenceviewer.org/"); | ||
631 | return TRUE; | ||
632 | } | ||
633 | else if (LLStringUtil::compareInsensitive("/icanhasblog", cur_token) == 0) | ||
634 | { | ||
635 | LLWeb::loadURLInternal("http://www.imprudenceviewer.org/"); | ||
636 | return TRUE; | ||
637 | } | ||
638 | else if (LLStringUtil::compareInsensitive("/icanhascodie", cur_token) == 0) | ||
639 | { | ||
640 | LLChat chat; | ||
641 | chat.mText = "All work and no play makes Codie a dull girl. All work and no play..."; | ||
642 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | ||
643 | LLFloaterChat::addChat(chat); | ||
644 | if (revised_string) | ||
645 | { | ||
646 | revised_string->assign(LLStringUtil::null); | ||
647 | } | ||
648 | return TRUE; | ||
649 | } | ||
650 | else if (LLStringUtil::compareInsensitive("/icanhasfail", cur_token) == 0) | ||
651 | { | ||
652 | LLWeb::loadURLInternal("http://www.failblog.org/"); | ||
653 | return TRUE; | ||
654 | } | ||
655 | else if (LLStringUtil::compareInsensitive("/icanhasdownload", cur_token) == 0 || | ||
656 | LLStringUtil::compareInsensitive("/icanhasdownloads", cur_token) == 0 || | ||
657 | LLStringUtil::compareInsensitive("/icanhasupdate", cur_token) == 0 || | ||
658 | LLStringUtil::compareInsensitive("/icanhasupdates", cur_token) == 0 ) | ||
659 | { | ||
660 | LLWeb::loadURLInternal("http://imprudenceviewer.org/wiki/Downloads"); | ||
661 | return TRUE; | ||
662 | } | ||
663 | else if (LLStringUtil::compareInsensitive("/icanhasfeatures", cur_token) == 0) | ||
664 | { | ||
665 | LLWeb::loadURLInternal("http://imprudenceviewer.org/wiki/Features"); | ||
666 | return TRUE; | ||
667 | } | ||
668 | else if (LLStringUtil::compareInsensitive("/icanhaswiki", cur_token) == 0) | ||
669 | { | ||
670 | LLWeb::loadURLInternal("http://imprudenceviewer.org/wiki/"); | ||
671 | return TRUE; | ||
672 | } | ||
673 | else if (LLStringUtil::compareInsensitive("/icanhasbugs", cur_token) == 0 || | ||
674 | LLStringUtil::compareInsensitive("/icanhasbug", cur_token) == 0 ) | ||
675 | { | ||
676 | LLWeb::loadURLInternal("http://redmine.imprudenceviewer.org/"); | ||
677 | return TRUE; | ||
678 | } | ||
679 | else if (LLStringUtil::compareInsensitive("/icanhasgit", cur_token) == 0) | ||
680 | { | ||
681 | LLWeb::loadURLInternal("http://github.com/imprudence/imprudence/"); | ||
682 | return TRUE; | ||
683 | } | ||
684 | else if (LLStringUtil::compareInsensitive("/icanhasplurk", cur_token) == 0) | ||
685 | { | ||
686 | LLWeb::loadURLInternal("http://plurk.com/imprudence"); | ||
687 | return TRUE; | ||
688 | } | ||
689 | else if (LLStringUtil::compareInsensitive("/icanhastwitter", cur_token) == 0) | ||
690 | { | ||
691 | LLWeb::loadURLInternal("http://twitter.com/ImpViewer"); | ||
692 | return TRUE; | ||
693 | } | ||
694 | |||
695 | |||
696 | else if (LLStringUtil::compareInsensitive("/icanhasimprudence", cur_token) == 0) | ||
697 | { | ||
698 | LLChat chat; | ||
699 | chat.mText = "You are using it right now, silly!..."; | ||
700 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | ||
701 | LLFloaterChat::addChat(chat); | ||
702 | if (revised_string) | ||
703 | { | ||
704 | revised_string->assign(LLStringUtil::null); | ||
705 | } | ||
706 | return TRUE; | ||
707 | } | ||
708 | else if (LLStringUtil::compareInsensitive("/icanhasnoms", cur_token) == 0 || | ||
709 | LLStringUtil::compareInsensitive("/icanhasnom", cur_token) == 0) | ||
710 | { | ||
711 | LLViewerImage* kitteh = gImageList.getImageFromFile("nomnom.png", TRUE, TRUE); | ||
712 | if (kitteh) | ||
713 | { | ||
714 | S32 left, top; | ||
715 | gFloaterView->getNewFloaterPosition(&left, &top); | ||
716 | LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); | ||
717 | rect.translate(left - rect.mLeft, top - rect.mTop); | ||
718 | |||
719 | LLPreviewTexture* preview; | ||
720 | preview = new LLPreviewTexture(rect, "Om nom nom!", kitteh); | ||
721 | preview->setSourceID(LLUUID::generateNewID()); | ||
722 | preview->setFocus(TRUE); | ||
723 | preview->center(); | ||
724 | gFloaterView->adjustToFitScreen(preview, FALSE); | ||
725 | } | ||
726 | return TRUE; | ||
727 | } | ||
728 | else if (LLStringUtil::compareInsensitive("/icanhasceilingcat", cur_token) == 0 || | ||
729 | LLStringUtil::compareInsensitive("/icanhascielingcat", cur_token) == 0) | ||
730 | { | ||
731 | LLViewerImage* kitteh = gImageList.getImageFromFile("ceilingcat.png", TRUE, TRUE); | ||
732 | if (kitteh) | ||
733 | { | ||
734 | S32 left, top; | ||
735 | gFloaterView->getNewFloaterPosition(&left, &top); | ||
736 | LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); | ||
737 | rect.translate(left - rect.mLeft, top - rect.mTop); | ||
738 | |||
739 | LLPreviewTexture* preview; | ||
740 | preview = new LLPreviewTexture(rect, "Ceiling Cat is watching you!", kitteh); | ||
741 | preview->setSourceID(LLUUID::generateNewID()); | ||
742 | preview->setFocus(TRUE); | ||
743 | preview->center(); | ||
744 | gFloaterView->adjustToFitScreen(preview, FALSE); | ||
745 | } | ||
746 | return TRUE; | ||
747 | } | ||
748 | else if (LLStringUtil::compareInsensitive("/icanhascake", cur_token) == 0 ) | ||
749 | { | ||
750 | LLViewerImage* kitteh = gImageList.getImageFromFile("cakeisalie.png", TRUE, TRUE); | ||
751 | if (kitteh) | ||
752 | { | ||
753 | S32 left, top; | ||
754 | gFloaterView->getNewFloaterPosition(&left, &top); | ||
755 | LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); | ||
756 | rect.translate(left - rect.mLeft, top - rect.mTop); | ||
757 | |||
758 | LLPreviewTexture* preview; | ||
759 | preview = new LLPreviewTexture(rect, "THE CAKE IS A LIE!", kitteh); | ||
760 | preview->setSourceID(LLUUID::generateNewID()); | ||
761 | preview->setFocus(TRUE); | ||
762 | preview->center(); | ||
763 | gFloaterView->adjustToFitScreen(preview, FALSE); | ||
764 | } | ||
765 | return TRUE; | ||
766 | } | ||
767 | else if (LLStringUtil::compareInsensitive("/icanhastentacles", cur_token) == 0 ) | ||
768 | { | ||
769 | LLViewerImage* kitteh = gImageList.getImageFromFile("octopus.png", TRUE, TRUE); | ||
770 | if (kitteh) | ||
771 | { | ||
772 | S32 left, top; | ||
773 | gFloaterView->getNewFloaterPosition(&left, &top); | ||
774 | LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); | ||
775 | rect.translate(left - rect.mLeft, top - rect.mTop); | ||
776 | |||
777 | LLPreviewTexture* preview; | ||
778 | preview = new LLPreviewTexture(rect, "All hail the mighty octopus!", kitteh); | ||
779 | preview->setSourceID(LLUUID::generateNewID()); | ||
780 | preview->setFocus(TRUE); | ||
781 | preview->center(); | ||
782 | gFloaterView->adjustToFitScreen(preview, FALSE); | ||
783 | } | ||
784 | return TRUE; | ||
785 | } | ||
786 | else if (LLStringUtil::compareInsensitive("/icanhashugs", cur_token) == 0 || | ||
787 | LLStringUtil::compareInsensitive("/icanhashug", cur_token) == 0) | ||
788 | { | ||
789 | LLViewerImage* kitteh = gImageList.getImageFromFile("hugs.png", TRUE, TRUE); | ||
790 | if (kitteh) | ||
791 | { | ||
792 | S32 left, top; | ||
793 | gFloaterView->getNewFloaterPosition(&left, &top); | ||
794 | LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); | ||
795 | rect.translate(left - rect.mLeft, top - rect.mTop); | ||
796 | |||
797 | LLPreviewTexture* preview; | ||
798 | preview = new LLPreviewTexture(rect, "Yes, you can has hugs!", kitteh); | ||
799 | preview->setSourceID(LLUUID::generateNewID()); | ||
800 | preview->setFocus(TRUE); | ||
801 | preview->center(); | ||
802 | gFloaterView->adjustToFitScreen(preview, FALSE); | ||
803 | } | ||
804 | return TRUE; | ||
805 | } | ||
806 | |||
606 | } | 807 | } |
607 | 808 | ||
608 | if(!gesture) | 809 | if(!gesture) |
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp index 1b00dfb..8e98cbc 100644 --- a/linden/indra/newview/llgroupnotify.cpp +++ b/linden/indra/newview/llgroupnotify.cpp | |||
@@ -196,6 +196,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, | |||
196 | // Sadly, our LLTextEditor can't handle both styled and unstyled text | 196 | // Sadly, our LLTextEditor can't handle both styled and unstyled text |
197 | // at the same time. Hence this space must be styled. JC | 197 | // at the same time. Hence this space must be styled. JC |
198 | text->appendColoredText(std::string(" "),false,false,LLColor4::grey4); | 198 | text->appendColoredText(std::string(" "),false,false,LLColor4::grey4); |
199 | text->setParseHTML(TRUE); | ||
199 | text->appendColoredText(std::string("\n\n") + message,false,false,LLColor4::grey4); | 200 | text->appendColoredText(std::string("\n\n") + message,false,false,LLColor4::grey4); |
200 | 201 | ||
201 | LLColor4 semi_transparent(1.0f,1.0f,1.0f,0.8f); | 202 | LLColor4 semi_transparent(1.0f,1.0f,1.0f,0.8f); |
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp index 5061197..2253404 100644 --- a/linden/indra/newview/llimview.cpp +++ b/linden/indra/newview/llimview.cpp | |||
@@ -613,11 +613,11 @@ void LLIMMgr::addMessage( | |||
613 | // create IM window as necessary | 613 | // create IM window as necessary |
614 | if(!floater) | 614 | if(!floater) |
615 | { | 615 | { |
616 | if (!mIgnoreGroupList.empty()) | 616 | if (gIMMgr->getIgnoreGroupListCount() > 0 && gAgent.isInGroup(session_id)) |
617 | { | 617 | { |
618 | // Check to see if we're blocking this group's chat | 618 | // Check to see if we're blocking this group's chat |
619 | LLGroupData *group_data = NULL; | 619 | LLGroupData* group_data = NULL; |
620 | 620 | ||
621 | // Search for this group in the agent's groups list | 621 | // Search for this group in the agent's groups list |
622 | LLDynamicArray<LLGroupData>::iterator i; | 622 | LLDynamicArray<LLGroupData>::iterator i; |
623 | 623 | ||
@@ -631,9 +631,8 @@ void LLIMMgr::addMessage( | |||
631 | } | 631 | } |
632 | 632 | ||
633 | // If the group is in our list then return | 633 | // If the group is in our list then return |
634 | if (group_data && getIgnoreGroup(group_data->mID)) | 634 | if (group_data && gIMMgr->getIgnoreGroup(group_data->mID)) |
635 | { | 635 | { |
636 | // llinfos << "ignoring chat from group " << group_data->mID << llendl; | ||
637 | return; | 636 | return; |
638 | } | 637 | } |
639 | } | 638 | } |
@@ -1383,7 +1382,7 @@ void LLIMMgr::saveIgnoreGroup() | |||
1383 | } | 1382 | } |
1384 | } | 1383 | } |
1385 | 1384 | ||
1386 | void LLIMMgr::updateIgnoreGroup(const LLUUID& group_id, const bool& ignore) | 1385 | void LLIMMgr::updateIgnoreGroup(const LLUUID& group_id, bool ignore) |
1387 | { | 1386 | { |
1388 | if (group_id.notNull()) | 1387 | if (group_id.notNull()) |
1389 | { | 1388 | { |
diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h index 8f665d2..2539203 100644 --- a/linden/indra/newview/llimview.h +++ b/linden/indra/newview/llimview.h | |||
@@ -174,7 +174,7 @@ public: | |||
174 | 174 | ||
175 | void loadIgnoreGroup(); | 175 | void loadIgnoreGroup(); |
176 | void saveIgnoreGroup(); | 176 | void saveIgnoreGroup(); |
177 | void updateIgnoreGroup(const LLUUID& group_id, const bool& ignore); | 177 | void updateIgnoreGroup(const LLUUID& group_id, bool ignore); |
178 | // Returns true if group chat is ignored for the UUID, false if not | 178 | // Returns true if group chat is ignored for the UUID, false if not |
179 | bool getIgnoreGroup(const LLUUID& group_id); | 179 | bool getIgnoreGroup(const LLUUID& group_id); |
180 | 180 | ||
@@ -219,6 +219,10 @@ private: | |||
219 | LLSD mPendingAgentListUpdates; | 219 | LLSD mPendingAgentListUpdates; |
220 | 220 | ||
221 | std::list<LLUUID> mIgnoreGroupList; | 221 | std::list<LLUUID> mIgnoreGroupList; |
222 | |||
223 | public: | ||
224 | |||
225 | S32 getIgnoreGroupListCount() { return mIgnoreGroupList.size(); } | ||
222 | }; | 226 | }; |
223 | 227 | ||
224 | 228 | ||
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp index 55e1b33..e0d6376 100644 --- a/linden/indra/newview/llpanelgroupgeneral.cpp +++ b/linden/indra/newview/llpanelgroupgeneral.cpp | |||
@@ -561,6 +561,10 @@ bool LLPanelGroupGeneral::apply(std::string& mesg) | |||
561 | gIMMgr->saveIgnoreGroup(); | 561 | gIMMgr->saveIgnoreGroup(); |
562 | } | 562 | } |
563 | 563 | ||
564 | mCtrlReceiveNotices->resetDirty(); //resetDirty() here instead of in update because this is where the settings | ||
565 | mCtrlListGroup->resetDirty(); //are actually being applied. onCommitUserOnly doesn't call updateChanged directly. | ||
566 | mCtrlReceiveChat->resetDirty(); | ||
567 | |||
564 | mChanged = FALSE; | 568 | mChanged = FALSE; |
565 | 569 | ||
566 | return true; | 570 | return true; |
@@ -774,14 +778,21 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) | |||
774 | { | 778 | { |
775 | mCtrlReceiveNotices->setEnabled(mAllowEdit); | 779 | mCtrlReceiveNotices->setEnabled(mAllowEdit); |
776 | } | 780 | } |
777 | mCtrlReceiveNotices->resetDirty(); | ||
778 | } | 781 | } |
779 | 782 | ||
780 | if (mCtrlReceiveChat) | 783 | if (mCtrlReceiveChat) |
781 | { | 784 | { |
782 | mCtrlReceiveChat->setVisible(is_member); | 785 | mCtrlReceiveChat->setVisible(is_member); |
783 | mCtrlReceiveChat->setEnabled(TRUE); | 786 | mCtrlReceiveChat->setEnabled(TRUE); |
784 | mCtrlReceiveChat->resetDirty(); | 787 | } |
788 | |||
789 | if (mCtrlListGroup) | ||
790 | { | ||
791 | mCtrlListGroup->setVisible(is_member); | ||
792 | if (is_member) | ||
793 | { | ||
794 | mCtrlListGroup->setEnabled(mAllowEdit); | ||
795 | } | ||
785 | } | 796 | } |
786 | 797 | ||
787 | 798 | ||
diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp index 2c8ef4d..e915bd2 100644 --- a/linden/indra/newview/llprefsim.cpp +++ b/linden/indra/newview/llprefsim.cpp | |||
@@ -45,6 +45,7 @@ | |||
45 | #include "llviewercontrol.h" | 45 | #include "llviewercontrol.h" |
46 | #include "llviewernetwork.h" | 46 | #include "llviewernetwork.h" |
47 | #include "lluictrlfactory.h" | 47 | #include "lluictrlfactory.h" |
48 | #include "llstartup.h" | ||
48 | 49 | ||
49 | #include "lldirpicker.h" | 50 | #include "lldirpicker.h" |
50 | 51 | ||
@@ -106,22 +107,23 @@ BOOL LLPrefsIMImpl::postBuild() | |||
106 | childSetLabelArg("send_im_to_email", "[EMAIL]", getString("log_in_to_change")); | 107 | childSetLabelArg("send_im_to_email", "[EMAIL]", getString("log_in_to_change")); |
107 | 108 | ||
108 | // Don't enable this until we get personal data | 109 | // Don't enable this until we get personal data |
109 | childDisable("include_im_in_chat_console"); | 110 | // Unless we're already logged in. Some non-SL grids won't send us the data we need -- MC |
110 | childDisable("include_im_in_chat_history"); | 111 | childSetEnabled("include_im_in_chat_console", LLStartUp::isLoggedIn()); |
111 | childDisable("show_timestamps_check"); | 112 | childSetEnabled("include_im_in_chat_history", LLStartUp::isLoggedIn()); |
112 | childDisable("friends_online_notify_checkbox"); | 113 | childSetEnabled("show_timestamps_check", LLStartUp::isLoggedIn()); |
114 | childSetEnabled("friends_online_notify_checkbox", LLStartUp::isLoggedIn()); | ||
113 | 115 | ||
114 | childDisable("online_visibility"); | 116 | childSetEnabled("online_visibility", LLStartUp::isLoggedIn()); |
115 | childDisable("send_im_to_email"); | 117 | childSetEnabled("send_im_to_email", LLStartUp::isLoggedIn()); |
116 | childDisable("log_instant_messages"); | 118 | childSetEnabled("log_instant_messages", LLStartUp::isLoggedIn()); |
117 | childDisable("log_chat"); | 119 | childSetEnabled("log_chat", LLStartUp::isLoggedIn()); |
118 | childDisable("log_show_history"); | 120 | childSetEnabled("log_show_history", LLStartUp::isLoggedIn()); |
119 | childDisable("log_path_button"); | 121 | childSetEnabled("log_path_button", LLStartUp::isLoggedIn()); |
120 | childDisable("busy_response"); | 122 | childSetEnabled("busy_response", LLStartUp::isLoggedIn()); |
121 | childDisable("log_instant_messages_timestamp"); | 123 | childSetEnabled("log_instant_messages_timestamp", LLStartUp::isLoggedIn()); |
122 | childDisable("log_chat_timestamp"); | 124 | childSetEnabled("log_chat_timestamp", LLStartUp::isLoggedIn()); |
123 | childDisable("log_chat_IM"); | 125 | childSetEnabled("log_chat_IM", LLStartUp::isLoggedIn()); |
124 | childDisable("log_date_timestamp"); | 126 | childSetEnabled("log_date_timestamp", LLStartUp::isLoggedIn()); |
125 | 127 | ||
126 | childSetText("busy_response", getString("log_in_to_change")); | 128 | childSetText("busy_response", getString("log_in_to_change")); |
127 | 129 | ||
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index f154de9..5a10e98 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp | |||
@@ -4297,6 +4297,12 @@ void LLSelectMgr::requestObjectPropertiesFamily(LLViewerObject* object) | |||
4297 | msg->sendReliable( regionp->getHost() ); | 4297 | msg->sendReliable( regionp->getHost() ); |
4298 | } | 4298 | } |
4299 | 4299 | ||
4300 | // static | ||
4301 | void LLSelectMgr::waitForObjectResponse(LLUUID id) | ||
4302 | { | ||
4303 | if (sObjectPropertiesFamilyRequests.count(id) == 0) | ||
4304 | sObjectPropertiesFamilyRequests.insert(id); | ||
4305 | } | ||
4300 | 4306 | ||
4301 | // static | 4307 | // static |
4302 | void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data) | 4308 | void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data) |
diff --git a/linden/indra/newview/llselectmgr.h b/linden/indra/newview/llselectmgr.h index c19d33d..495e61c 100644 --- a/linden/indra/newview/llselectmgr.h +++ b/linden/indra/newview/llselectmgr.h | |||
@@ -361,6 +361,7 @@ public: | |||
361 | ~LLSelectMgr(); | 361 | ~LLSelectMgr(); |
362 | 362 | ||
363 | static void cleanupGlobals(); | 363 | static void cleanupGlobals(); |
364 | static void waitForObjectResponse(LLUUID id); | ||
364 | 365 | ||
365 | // LLEditMenuHandler interface | 366 | // LLEditMenuHandler interface |
366 | virtual BOOL canUndo() const; | 367 | virtual BOOL canUndo() const; |
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index e997e5f..d5adc11 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp | |||
@@ -1073,10 +1073,11 @@ bool idle_startup() | |||
1073 | // color init must be after saved settings loaded | 1073 | // color init must be after saved settings loaded |
1074 | init_colors(); | 1074 | init_colors(); |
1075 | 1075 | ||
1076 | if (gSavedSettings.getBOOL("VivoxLicenseAccepted")) | 1076 | if (gSavedSettings.getBOOL("VivoxLicenseAccepted") || gHippoGridManager->getConnectedGrid()->isSecondLife()) |
1077 | { | 1077 | { |
1078 | // skipping over STATE_LOGIN_VOICE_LICENSE since we don't need it | 1078 | // skipping over STATE_LOGIN_VOICE_LICENSE since we don't need it |
1079 | // skipping over STATE_UPDATE_CHECK because that just waits for input | 1079 | // skipping over STATE_UPDATE_CHECK because that just waits for input |
1080 | // We don't do this on non-SL grids either | ||
1080 | LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); | 1081 | LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); |
1081 | } | 1082 | } |
1082 | else | 1083 | else |
@@ -2788,8 +2789,11 @@ bool idle_startup() | |||
2788 | // Have the agent start watching the friends list so we can update proxies | 2789 | // Have the agent start watching the friends list so we can update proxies |
2789 | gAgent.observeFriends(); | 2790 | gAgent.observeFriends(); |
2790 | 2791 | ||
2791 | // Start loading inventory | 2792 | if (gSavedSettings.getBOOL("FetchInventoryOnLogin")) |
2792 | gInventory.startBackgroundFetch(); | 2793 | { |
2794 | // Start loading inventory | ||
2795 | gInventory.startBackgroundFetch(); | ||
2796 | } | ||
2793 | 2797 | ||
2794 | if (gSavedSettings.getBOOL("LoginAsGod")) | 2798 | if (gSavedSettings.getBOOL("LoginAsGod")) |
2795 | { | 2799 | { |
diff --git a/linden/indra/newview/llstartup.h b/linden/indra/newview/llstartup.h index 9a3c91c..08862e6 100644 --- a/linden/indra/newview/llstartup.h +++ b/linden/indra/newview/llstartup.h | |||
@@ -124,6 +124,9 @@ public: | |||
124 | static bool shouldAutoLogin() { return mShouldAutoLogin; }; | 124 | static bool shouldAutoLogin() { return mShouldAutoLogin; }; |
125 | static void setShouldAutoLogin(bool value) { mShouldAutoLogin = value; }; | 125 | static void setShouldAutoLogin(bool value) { mShouldAutoLogin = value; }; |
126 | 126 | ||
127 | // Returns true if startup has been successfully completed | ||
128 | static bool isLoggedIn() { return gStartupState == STATE_STARTED; } | ||
129 | |||
127 | private: | 130 | private: |
128 | static bool mStartedOnce; | 131 | static bool mStartedOnce; |
129 | static bool mShouldAutoLogin; | 132 | static bool mShouldAutoLogin; |
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp index 432fcc5..1981bb9 100644 --- a/linden/indra/newview/llviewermenufile.cpp +++ b/linden/indra/newview/llviewermenufile.cpp | |||
@@ -640,6 +640,38 @@ void upload_new_resource(const std::string& src_filename, std::string name, | |||
640 | return; | 640 | return; |
641 | } | 641 | } |
642 | } | 642 | } |
643 | #ifdef LL_DARWIN | ||
644 | else if(exten == "psd") | ||
645 | { | ||
646 | asset_type = LLAssetType::AT_TEXTURE; | ||
647 | if (!LLViewerImageList::createUploadFile(src_filename, | ||
648 | filename, | ||
649 | IMG_CODEC_PSD )) | ||
650 | { | ||
651 | error_message = llformat("Problem with file %s:\n\n%s\n", | ||
652 | src_filename.c_str(), LLImage::getLastError().c_str()); | ||
653 | args["FILE"] = src_filename; | ||
654 | args["ERROR"] = LLImage::getLastError(); | ||
655 | upload_error(error_message, "ProblemWithFile", filename, args); | ||
656 | return; | ||
657 | } | ||
658 | } | ||
659 | else if(exten == "tif" || exten == "tiff") | ||
660 | { | ||
661 | asset_type = LLAssetType::AT_TEXTURE; | ||
662 | if (!LLViewerImageList::createUploadFile(src_filename, | ||
663 | filename, | ||
664 | IMG_CODEC_TIFF )) | ||
665 | { | ||
666 | error_message = llformat("Problem with file %s:\n\n%s\n", | ||
667 | src_filename.c_str(), LLImage::getLastError().c_str()); | ||
668 | args["FILE"] = src_filename; | ||
669 | args["ERROR"] = LLImage::getLastError(); | ||
670 | upload_error(error_message, "ProblemWithFile", filename, args); | ||
671 | return; | ||
672 | } | ||
673 | } | ||
674 | #endif | ||
643 | else if(exten == "wav") | 675 | else if(exten == "wav") |
644 | { | 676 | { |
645 | asset_type = LLAssetType::AT_SOUND; // tag it as audio | 677 | asset_type = LLAssetType::AT_SOUND; // tag it as audio |
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index a512a66..dbf9d72 100755 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp | |||
@@ -262,6 +262,13 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) | |||
262 | msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); | 262 | msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); |
263 | msg->sendReliable(LLHost(payload["sender"].asString())); | 263 | msg->sendReliable(LLHost(payload["sender"].asString())); |
264 | break; | 264 | break; |
265 | case 2: | ||
266 | // Push another notification | ||
267 | // Do we need to check for OfferFriendshipNoMessage here ever? -- MC | ||
268 | LLNotifications::instance().add("OfferFriendship", notification["substitutions"], notification["payload"]); | ||
269 | LLURLDispatcher::dispatch(llformat("secondlife:///app/agent/%s/about",payload["from_id"].asString().c_str()), NULL, true); | ||
270 | break; | ||
271 | case 3: | ||
265 | default: | 272 | default: |
266 | // close button probably, possibly timed out | 273 | // close button probably, possibly timed out |
267 | break; | 274 | break; |
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp index 535c504..afd9b95 100644 --- a/linden/indra/newview/llvlcomposition.cpp +++ b/linden/indra/newview/llvlcomposition.cpp | |||
@@ -73,10 +73,10 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32 | |||
73 | 73 | ||
74 | // Load Terrain Textures - Original ones | 74 | // Load Terrain Textures - Original ones |
75 | // Load from file as OpenSim-based grids don't include these yet -- MC | 75 | // Load from file as OpenSim-based grids don't include these yet -- MC |
76 | setDetailTextureID(0, TERRAIN_DIRT_DETAIL.asString()+".j2c", TRUE, TRUE); | 76 | setDetailTextureID(0, TERRAIN_DIRT_DETAIL.asString()+".j2c", TRUE, FALSE, 0, 0, TERRAIN_DIRT_DETAIL); |
77 | setDetailTextureID(1, TERRAIN_GRASS_DETAIL.asString()+".j2c", TRUE, TRUE); | 77 | setDetailTextureID(1, TERRAIN_GRASS_DETAIL.asString()+".j2c", TRUE, FALSE, 0, 0, TERRAIN_GRASS_DETAIL); |
78 | setDetailTextureID(2, TERRAIN_MOUNTAIN_DETAIL.asString()+".j2c", TRUE, TRUE); | 78 | setDetailTextureID(2, TERRAIN_MOUNTAIN_DETAIL.asString()+".j2c", TRUE, FALSE, 0, 0, TERRAIN_MOUNTAIN_DETAIL); |
79 | setDetailTextureID(3, TERRAIN_ROCK_DETAIL.asString()+".j2c", TRUE, TRUE); | 79 | setDetailTextureID(3, TERRAIN_ROCK_DETAIL.asString()+".j2c", TRUE, FALSE, 0, 0, TERRAIN_ROCK_DETAIL); |
80 | 80 | ||
81 | // Initialize the texture matrix to defaults. | 81 | // Initialize the texture matrix to defaults. |
82 | for (S32 i = 0; i < CORNER_COUNT; ++i) | 82 | for (S32 i = 0; i < CORNER_COUNT; ++i) |
@@ -112,13 +112,13 @@ void LLVLComposition::setDetailTextureID(S32 corner, const LLUUID& id) | |||
112 | mRawImages[corner] = NULL; | 112 | mRawImages[corner] = NULL; |
113 | } | 113 | } |
114 | 114 | ||
115 | void LLVLComposition::setDetailTextureID(S32 corner, const std::string& filename, const bool& usemipmap, const bool& levelimmediate) | 115 | void LLVLComposition::setDetailTextureID(S32 corner, const std::string& filename, const bool& usemipmap, const bool& levelimmediate, LLGLint internal_format, LLGLenum primary_format, const LLUUID& force_id) |
116 | { | 116 | { |
117 | if(filename.empty()) | 117 | if(filename.empty()) |
118 | { | 118 | { |
119 | return; | 119 | return; |
120 | } | 120 | } |
121 | mDetailTextures[corner] = gImageList.getImageFromFile(filename, usemipmap, levelimmediate); | 121 | mDetailTextures[corner] = gImageList.getImageFromFile(filename, usemipmap, levelimmediate, internal_format, primary_format, force_id); |
122 | mDetailTextures[corner]->setNoDelete() ; | 122 | mDetailTextures[corner]->setNoDelete() ; |
123 | mRawImages[corner] = NULL; | 123 | mRawImages[corner] = NULL; |
124 | } | 124 | } |
diff --git a/linden/indra/newview/llvlcomposition.h b/linden/indra/newview/llvlcomposition.h index 4ae296c..eb61bfd 100644 --- a/linden/indra/newview/llvlcomposition.h +++ b/linden/indra/newview/llvlcomposition.h | |||
@@ -67,7 +67,7 @@ public: | |||
67 | F32 getHeightRange(S32 corner); | 67 | F32 getHeightRange(S32 corner); |
68 | 68 | ||
69 | void setDetailTextureID(S32 corner, const LLUUID& id); | 69 | void setDetailTextureID(S32 corner, const LLUUID& id); |
70 | void setDetailTextureID(S32 corner, const std::string& filename, const bool& usemipmap, const bool& levelimmediate); | 70 | void setDetailTextureID(S32 corner, const std::string& filename, const bool& usemipmap, const bool& levelimmediate, LLGLint internal_format, LLGLenum primary_format, const LLUUID& force_id); |
71 | void setStartHeight(S32 corner, F32 start_height); | 71 | void setStartHeight(S32 corner, F32 start_height); |
72 | void setHeightRange(S32 corner, F32 range); | 72 | void setHeightRange(S32 corner, F32 range); |
73 | 73 | ||
diff --git a/linden/indra/newview/llwindlightremotectrl.cpp b/linden/indra/newview/llwindlightremotectrl.cpp index 5a6b35d..b9111d3 100644 --- a/linden/indra/newview/llwindlightremotectrl.cpp +++ b/linden/indra/newview/llwindlightremotectrl.cpp | |||
@@ -121,6 +121,7 @@ BOOL LLWindlightRemoteCtrl::postBuild() | |||
121 | LLComboBox* presetsCombo = getChild<LLComboBox>("Presets"); | 121 | LLComboBox* presetsCombo = getChild<LLComboBox>("Presets"); |
122 | if (presetsCombo) | 122 | if (presetsCombo) |
123 | { | 123 | { |
124 | presetsCombo->setSimple(LLWLParamManager::instance()->mCurParams.mName); | ||
124 | presetsCombo->setCommitCallback(onCommitPreset); | 125 | presetsCombo->setCommitCallback(onCommitPreset); |
125 | presetsCombo->setCallbackUserData(this); | 126 | presetsCombo->setCallbackUserData(this); |
126 | 127 | ||
diff --git a/linden/indra/newview/panelradar.cpp b/linden/indra/newview/panelradar.cpp index 8ff5fad..a868ee2 100644 --- a/linden/indra/newview/panelradar.cpp +++ b/linden/indra/newview/panelradar.cpp | |||
@@ -114,7 +114,9 @@ bool PanelRadar::isImpDev(const LLUUID& agent_id) | |||
114 | std::string agent_name = getSelectedName(agent_id); | 114 | std::string agent_name = getSelectedName(agent_id); |
115 | return (agent_name == "McCabe Maxsted" || | 115 | return (agent_name == "McCabe Maxsted" || |
116 | agent_name == "Jacek Antonelli" || | 116 | agent_name == "Jacek Antonelli" || |
117 | agent_name == "Armin Weatherwax"); | 117 | agent_name == "Armin Weatherwax" || |
118 | agent_name == "Elektra Hesse" || | ||
119 | agent_name == "CodeBastard Redgrave"); | ||
118 | } | 120 | } |
119 | 121 | ||
120 | void PanelRadar::updateRadarInfo() | 122 | void PanelRadar::updateRadarInfo() |
diff --git a/linden/indra/newview/qtoolalign.cpp b/linden/indra/newview/qtoolalign.cpp new file mode 100644 index 0000000..d7f7ad0 --- /dev/null +++ b/linden/indra/newview/qtoolalign.cpp | |||
@@ -0,0 +1,585 @@ | |||
1 | /** | ||
2 | * @file qtoolalign.cpp | ||
3 | * @brief A tool to align objects | ||
4 | * @author Karl Stiefvater (Qarl) | ||
5 | * | ||
6 | * Karl has given permission to use this code under the terms of | ||
7 | * the GNU GPL v2 plus FLOSS exception and/or the GNU LGPL v2.1. | ||
8 | * | ||
9 | * Backported for Viewer 1.X code base by Jacek Antonelli. | ||
10 | */ | ||
11 | |||
12 | #include "llviewerprecompiledheaders.h" | ||
13 | |||
14 | // File includes | ||
15 | #include "qtoolalign.h" | ||
16 | |||
17 | // Library includes | ||
18 | #include "llbbox.h" | ||
19 | #include "v3math.h" | ||
20 | |||
21 | // Viewer includes | ||
22 | #include "llagent.h" | ||
23 | #include "llbox.h" | ||
24 | #include "llcylinder.h" | ||
25 | #include "llfloatertools.h" | ||
26 | #include "llselectmgr.h" | ||
27 | #include "llviewercamera.h" | ||
28 | #include "llviewercontrol.h" | ||
29 | #include "llviewerobject.h" | ||
30 | #include "llviewerwindow.h" | ||
31 | |||
32 | |||
33 | const F32 MANIPULATOR_SIZE = 5.0; | ||
34 | const F32 MANIPULATOR_SELECT_SIZE = 20.0; | ||
35 | |||
36 | |||
37 | |||
38 | QToolAlign::QToolAlign() | ||
39 | : LLTool(std::string("Align")) | ||
40 | { | ||
41 | } | ||
42 | |||
43 | |||
44 | QToolAlign::~QToolAlign() | ||
45 | { | ||
46 | } | ||
47 | |||
48 | |||
49 | |||
50 | BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask) | ||
51 | { | ||
52 | if (mHighlightedAxis != -1) | ||
53 | { | ||
54 | align(); | ||
55 | } | ||
56 | else | ||
57 | { | ||
58 | gViewerWindow->pickAsync(x, y, mask, pickCallback); | ||
59 | } | ||
60 | |||
61 | return TRUE; | ||
62 | } | ||
63 | |||
64 | |||
65 | |||
66 | void QToolAlign::pickCallback(const LLPickInfo& pick_info) | ||
67 | { | ||
68 | LLViewerObject* object = pick_info.getObject(); | ||
69 | |||
70 | if (object) | ||
71 | { | ||
72 | if (object->isAvatar()) | ||
73 | { | ||
74 | return; | ||
75 | } | ||
76 | |||
77 | if (pick_info.mKeyMask & MASK_SHIFT) | ||
78 | { | ||
79 | // If object not selected, select it | ||
80 | if ( !object->isSelected() ) | ||
81 | { | ||
82 | LLSelectMgr::getInstance()->selectObjectAndFamily(object); | ||
83 | } | ||
84 | else | ||
85 | { | ||
86 | LLSelectMgr::getInstance()->deselectObjectAndFamily(object); | ||
87 | } | ||
88 | } | ||
89 | else | ||
90 | { | ||
91 | LLSelectMgr::getInstance()->deselectAll(); | ||
92 | LLSelectMgr::getInstance()->selectObjectAndFamily(object); | ||
93 | } | ||
94 | |||
95 | } | ||
96 | else | ||
97 | { | ||
98 | if (!(pick_info.mKeyMask == MASK_SHIFT)) | ||
99 | { | ||
100 | LLSelectMgr::getInstance()->deselectAll(); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | LLSelectMgr::getInstance()->promoteSelectionToRoot(); | ||
105 | } | ||
106 | |||
107 | |||
108 | |||
109 | void QToolAlign::handleSelect() | ||
110 | { | ||
111 | // no parts, please | ||
112 | |||
113 | llwarns << "in select" << llendl; | ||
114 | LLSelectMgr::getInstance()->promoteSelectionToRoot(); | ||
115 | } | ||
116 | |||
117 | |||
118 | void QToolAlign::handleDeselect() | ||
119 | { | ||
120 | } | ||
121 | |||
122 | |||
123 | BOOL QToolAlign::findSelectedManipulator(S32 x, S32 y) | ||
124 | { | ||
125 | mHighlightedAxis = -1; | ||
126 | mHighlightedDirection = 0; | ||
127 | |||
128 | LLMatrix4 transform; | ||
129 | if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD) | ||
130 | { | ||
131 | LLVector4 translation(mBBox.getCenterAgent()); | ||
132 | transform.initRotTrans(mBBox.getRotation(), translation); | ||
133 | LLMatrix4 cfr(OGL_TO_CFR_ROTATION); | ||
134 | transform *= cfr; | ||
135 | LLMatrix4 window_scale; | ||
136 | F32 zoom_level = 2.f * gAgent.mHUDCurZoom; | ||
137 | window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f), | ||
138 | LLQuaternion::DEFAULT, | ||
139 | LLVector3::zero); | ||
140 | transform *= window_scale; | ||
141 | } | ||
142 | else | ||
143 | { | ||
144 | transform.initAll(LLVector3(1.f, 1.f, 1.f), mBBox.getRotation(), mBBox.getCenterAgent()); | ||
145 | |||
146 | LLMatrix4 projection_matrix = LLViewerCamera::getInstance()->getProjection(); | ||
147 | LLMatrix4 model_matrix = LLViewerCamera::getInstance()->getModelview(); | ||
148 | |||
149 | transform *= model_matrix; | ||
150 | transform *= projection_matrix; | ||
151 | } | ||
152 | |||
153 | |||
154 | //LLRect world_view_rect = getWorldViewRectScaled(); | ||
155 | F32 half_width = (F32)gViewerWindow->getWindowWidth() / 2.f; | ||
156 | F32 half_height = (F32)gViewerWindow->getWindowHeight() / 2.f; | ||
157 | LLVector2 manip2d; | ||
158 | LLVector2 mousePos((F32)x - half_width, (F32)y - half_height); | ||
159 | LLVector2 delta; | ||
160 | |||
161 | LLVector3 bbox_scale = mBBox.getMaxLocal() - mBBox.getMinLocal(); | ||
162 | |||
163 | for (S32 axis = VX; axis <= VZ; axis++) | ||
164 | { | ||
165 | for (F32 direction = -1.0; direction <= 1.0; direction += 2.0) | ||
166 | { | ||
167 | LLVector3 axis_vector = LLVector3(0,0,0); | ||
168 | axis_vector.mV[axis] = direction * bbox_scale.mV[axis] / 2.0; | ||
169 | |||
170 | LLVector4 manipulator_center = LLVector4(axis_vector); | ||
171 | |||
172 | LLVector4 screen_center = manipulator_center * transform; | ||
173 | screen_center /= screen_center.mV[VW]; | ||
174 | |||
175 | manip2d.setVec(screen_center.mV[VX] * half_width, screen_center.mV[VY] * half_height); | ||
176 | |||
177 | delta = manip2d - mousePos; | ||
178 | |||
179 | if (delta.magVecSquared() < MANIPULATOR_SELECT_SIZE * MANIPULATOR_SELECT_SIZE) | ||
180 | { | ||
181 | mHighlightedAxis = axis; | ||
182 | mHighlightedDirection = direction; | ||
183 | return TRUE; | ||
184 | } | ||
185 | |||
186 | } | ||
187 | } | ||
188 | |||
189 | return FALSE; | ||
190 | } | ||
191 | |||
192 | |||
193 | BOOL QToolAlign::handleHover(S32 x, S32 y, MASK mask) | ||
194 | { | ||
195 | if (mask & MASK_SHIFT) | ||
196 | { | ||
197 | mForce = FALSE; | ||
198 | } | ||
199 | else | ||
200 | { | ||
201 | mForce = TRUE; | ||
202 | } | ||
203 | |||
204 | gViewerWindow->setCursor(UI_CURSOR_ARROW); | ||
205 | return findSelectedManipulator(x, y); | ||
206 | } | ||
207 | |||
208 | |||
209 | |||
210 | void setup_transforms_bbox(LLBBox bbox) | ||
211 | { | ||
212 | // translate to center | ||
213 | LLVector3 center = bbox.getCenterAgent(); | ||
214 | gGL.translatef(center.mV[VX], center.mV[VY], center.mV[VZ]); | ||
215 | |||
216 | // rotate | ||
217 | LLQuaternion rotation = bbox.getRotation(); | ||
218 | F32 angle_radians, x, y, z; | ||
219 | rotation.getAngleAxis(&angle_radians, &x, &y, &z); | ||
220 | // gGL has no rotate method (despite having translate and scale) presumably because | ||
221 | // its authors smoke crack. so we hack. | ||
222 | gGL.flush(); | ||
223 | glRotatef(angle_radians * RAD_TO_DEG, x, y, z); | ||
224 | |||
225 | // scale | ||
226 | LLVector3 scale = bbox.getMaxLocal() - bbox.getMinLocal(); | ||
227 | gGL.scalef(scale.mV[VX], scale.mV[VY], scale.mV[VZ]); | ||
228 | } | ||
229 | |||
230 | |||
231 | void render_bbox(LLBBox bbox) | ||
232 | { | ||
233 | glMatrixMode(GL_MODELVIEW); | ||
234 | gGL.pushMatrix(); | ||
235 | |||
236 | setup_transforms_bbox(bbox); | ||
237 | |||
238 | gGL.flush(); | ||
239 | gBox.render(); | ||
240 | |||
241 | gGL.popMatrix(); | ||
242 | } | ||
243 | |||
244 | void render_cone_bbox(LLBBox bbox) | ||
245 | { | ||
246 | glMatrixMode(GL_MODELVIEW); | ||
247 | gGL.pushMatrix(); | ||
248 | |||
249 | setup_transforms_bbox(bbox); | ||
250 | |||
251 | gGL.flush(); | ||
252 | gCone.render(CONE_LOD_HIGHEST); | ||
253 | |||
254 | gGL.popMatrix(); | ||
255 | } | ||
256 | |||
257 | |||
258 | |||
259 | // the selection bbox isn't axis aligned, so we must construct one | ||
260 | // should this be cached in the selection manager? yes. | ||
261 | LLBBox get_selection_axis_aligned_bbox() | ||
262 | { | ||
263 | LLBBox selection_bbox = LLSelectMgr::getInstance()->getBBoxOfSelection(); | ||
264 | LLVector3 position = selection_bbox.getPositionAgent(); | ||
265 | |||
266 | LLBBox axis_aligned_bbox = LLBBox(position, LLQuaternion(), LLVector3(), LLVector3()); | ||
267 | axis_aligned_bbox.addPointLocal(LLVector3()); | ||
268 | |||
269 | // cycle over the nodes in selection | ||
270 | for (LLObjectSelection::iterator selection_iter = LLSelectMgr::getInstance()->getSelection()->begin(); | ||
271 | selection_iter != LLSelectMgr::getInstance()->getSelection()->end(); | ||
272 | ++selection_iter) | ||
273 | { | ||
274 | LLSelectNode *select_node = *selection_iter; | ||
275 | if (select_node) | ||
276 | { | ||
277 | LLViewerObject* object = select_node->getObject(); | ||
278 | if (object) | ||
279 | { | ||
280 | axis_aligned_bbox.addBBoxAgent(object->getBoundingBoxAgent()); | ||
281 | } | ||
282 | } | ||
283 | } | ||
284 | |||
285 | |||
286 | return axis_aligned_bbox; | ||
287 | } | ||
288 | |||
289 | |||
290 | |||
291 | void QToolAlign::computeManipulatorSize() | ||
292 | { | ||
293 | if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD) | ||
294 | { | ||
295 | mManipulatorSize = MANIPULATOR_SIZE / (LLViewerCamera::getInstance()->getViewHeightInPixels() * | ||
296 | gAgent.mHUDCurZoom); | ||
297 | } | ||
298 | else | ||
299 | { | ||
300 | F32 distance = dist_vec(gAgent.getCameraPositionAgent(), mBBox.getCenterAgent()); | ||
301 | |||
302 | if (distance > 0.001f) | ||
303 | { | ||
304 | // range != zero | ||
305 | F32 fraction_of_fov = MANIPULATOR_SIZE /LLViewerCamera::getInstance()->getViewHeightInPixels(); | ||
306 | F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView(); // radians | ||
307 | mManipulatorSize = MANIPULATOR_SIZE * distance * tan(apparent_angle); | ||
308 | } | ||
309 | else | ||
310 | { | ||
311 | // range == zero | ||
312 | mManipulatorSize = MANIPULATOR_SIZE; | ||
313 | } | ||
314 | } | ||
315 | } | ||
316 | |||
317 | |||
318 | LLColor4 manipulator_color[3] = { LLColor4(0.7f, 0.0f, 0.0f, 0.5f), | ||
319 | LLColor4(0.0f, 0.7f, 0.0f, 0.5f), | ||
320 | LLColor4(0.0f, 0.0f, 0.7f, 0.5f) }; | ||
321 | |||
322 | |||
323 | void QToolAlign::renderManipulators() | ||
324 | { | ||
325 | computeManipulatorSize(); | ||
326 | LLVector3 bbox_center = mBBox.getCenterAgent(); | ||
327 | LLVector3 bbox_scale = mBBox.getMaxLocal() - mBBox.getMinLocal(); | ||
328 | |||
329 | for (S32 axis = VX; axis <= VZ; axis++) | ||
330 | for (F32 direction = -1.0; direction <= 1.0; direction += 2.0) | ||
331 | { | ||
332 | F32 size = mManipulatorSize; | ||
333 | LLColor4 color = manipulator_color[axis]; | ||
334 | |||
335 | if ((axis == mHighlightedAxis) && (direction == mHighlightedDirection)) | ||
336 | { | ||
337 | size *= 2.0; | ||
338 | color *= 1.5; | ||
339 | } | ||
340 | |||
341 | S32 arrows = 1; | ||
342 | if (mForce) | ||
343 | { | ||
344 | arrows = 2; | ||
345 | } | ||
346 | |||
347 | for (S32 i = 0; i < arrows; i++) | ||
348 | { | ||
349 | LLVector3 axis_vector = LLVector3(0,0,0); | ||
350 | axis_vector.mV[axis] = direction * (bbox_scale.mV[axis] / 2.0 + i * (size/3.0)); | ||
351 | |||
352 | LLVector3 manipulator_center = bbox_center + axis_vector; | ||
353 | |||
354 | LLQuaternion manipulator_rotation; | ||
355 | manipulator_rotation.shortestArc(LLVector3(0,0,1), -1.0 * axis_vector); | ||
356 | |||
357 | LLBBox manipulator_bbox = LLBBox(manipulator_center, manipulator_rotation, | ||
358 | LLVector3(), LLVector3()); | ||
359 | |||
360 | manipulator_bbox.addPointLocal(LLVector3(-1, -1, -0.75) * size * 0.5); | ||
361 | manipulator_bbox.addPointLocal(LLVector3(1, 1, 0.75) * size * 0.5); | ||
362 | |||
363 | gGL.color4fv(color.mV); | ||
364 | // sadly, gCone doesn't use gGL like gBox does (presumably because its author smokes crack) so we | ||
365 | // also set the raw GL color. hopefully this won't screw-up later rendering. | ||
366 | glColor4fv(color.mV); | ||
367 | |||
368 | render_cone_bbox(manipulator_bbox); | ||
369 | } | ||
370 | } | ||
371 | } | ||
372 | |||
373 | |||
374 | void QToolAlign::render() | ||
375 | { | ||
376 | mBBox = get_selection_axis_aligned_bbox(); | ||
377 | |||
378 | // Draw bounding box | ||
379 | LLGLSUIDefault gls_ui; | ||
380 | LLGLEnable gl_blend(GL_BLEND); | ||
381 | LLGLEnable gls_alpha_test(GL_ALPHA_TEST); | ||
382 | LLGLDepthTest gls_depth(GL_FALSE); | ||
383 | gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); | ||
384 | |||
385 | // render box | ||
386 | LLColor4 default_normal_color( 0.7f, 0.7f, 0.7f, 0.1f ); | ||
387 | gGL.color4fv( default_normal_color.mV ); | ||
388 | |||
389 | render_bbox(mBBox); | ||
390 | renderManipulators(); | ||
391 | } | ||
392 | |||
393 | // only works for our specialized (AABB, position centered) bboxes | ||
394 | BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2) | ||
395 | { | ||
396 | const F32 FUDGE = 0.001f; // because of stupid SL precision/rounding | ||
397 | |||
398 | LLVector3 delta = bbox1.getCenterAgent() - bbox2.getCenterAgent(); | ||
399 | |||
400 | LLVector3 half_extent = (bbox1.getExtentLocal() + bbox2.getExtentLocal()) / 2.0; | ||
401 | |||
402 | return ((fabs(delta.mV[VX]) < half_extent.mV[VX] - FUDGE) && | ||
403 | (fabs(delta.mV[VY]) < half_extent.mV[VY] - FUDGE) && | ||
404 | (fabs(delta.mV[VZ]) < half_extent.mV[VZ] - FUDGE)); | ||
405 | } | ||
406 | |||
407 | |||
408 | |||
409 | // used to sort bboxes before packing | ||
410 | class BBoxCompare | ||
411 | { | ||
412 | public: | ||
413 | BBoxCompare(S32 axis, F32 direction, std::map<LLPointer<LLViewerObject>, LLBBox >& bboxes) : | ||
414 | mAxis(axis), mDirection(direction), mBBoxes(bboxes) {} | ||
415 | |||
416 | BOOL operator() (LLViewerObject* object1, LLViewerObject* object2) | ||
417 | { | ||
418 | LLVector3 corner1 = mBBoxes[object1].getCenterAgent() - | ||
419 | mDirection * mBBoxes[object1].getExtentLocal()/2.0; | ||
420 | |||
421 | LLVector3 corner2 = mBBoxes[object2].getCenterAgent() - | ||
422 | mDirection * mBBoxes[object2].getExtentLocal()/2.0; | ||
423 | |||
424 | |||
425 | return mDirection * corner1.mV[mAxis] < mDirection * corner2.mV[mAxis]; | ||
426 | } | ||
427 | |||
428 | S32 mAxis; | ||
429 | F32 mDirection; | ||
430 | std::map<LLPointer<LLViewerObject>, LLBBox >& mBBoxes; | ||
431 | }; | ||
432 | |||
433 | |||
434 | void QToolAlign::align() | ||
435 | { | ||
436 | // no linkset parts, please | ||
437 | LLSelectMgr::getInstance()->promoteSelectionToRoot(); | ||
438 | |||
439 | std::vector<LLPointer<LLViewerObject> > objects; | ||
440 | std::map<LLPointer<LLViewerObject>, LLBBox > original_bboxes; | ||
441 | |||
442 | // cycle over the nodes in selection and collect them into an array | ||
443 | for (LLObjectSelection::root_iterator selection_iter = LLSelectMgr::getInstance()->getSelection()->root_begin(); | ||
444 | selection_iter != LLSelectMgr::getInstance()->getSelection()->root_end(); | ||
445 | ++selection_iter) | ||
446 | { | ||
447 | LLSelectNode *select_node = *selection_iter; | ||
448 | if (select_node) | ||
449 | { | ||
450 | LLViewerObject* object = select_node->getObject(); | ||
451 | if (object) | ||
452 | { | ||
453 | LLVector3 position = object->getPositionAgent(); | ||
454 | |||
455 | LLBBox bbox = LLBBox(position, LLQuaternion(), LLVector3(), LLVector3()); | ||
456 | bbox.addPointLocal(LLVector3()); | ||
457 | |||
458 | // add the parent's bbox | ||
459 | bbox.addBBoxAgent(object->getBoundingBoxAgent()); | ||
460 | LLViewerObject::const_child_list_t& children = object->getChildren(); | ||
461 | |||
462 | for (LLViewerObject::const_child_list_t::const_iterator i = children.begin(); | ||
463 | i != children.end(); i++) | ||
464 | { | ||
465 | // add the child's bbox | ||
466 | LLViewerObject* child = *i; | ||
467 | bbox.addBBoxAgent(child->getBoundingBoxAgent()); | ||
468 | } | ||
469 | |||
470 | objects.push_back(object); | ||
471 | original_bboxes[object] = bbox; | ||
472 | } | ||
473 | } | ||
474 | } | ||
475 | |||
476 | S32 axis = mHighlightedAxis; | ||
477 | F32 direction = mHighlightedDirection; | ||
478 | |||
479 | // sort them into positional order for proper packing | ||
480 | BBoxCompare compare(axis, direction, original_bboxes); | ||
481 | sort(objects.begin(), objects.end(), compare); | ||
482 | |||
483 | // storage for their new position after alignment - start with original position first | ||
484 | std::map<LLPointer<LLViewerObject>, LLBBox > new_bboxes = original_bboxes; | ||
485 | |||
486 | // find new positions | ||
487 | for (S32 i = 0; i < (S32)objects.size(); i++) | ||
488 | { | ||
489 | LLBBox target_bbox = mBBox; | ||
490 | LLVector3 target_corner = target_bbox.getCenterAgent() - | ||
491 | direction * target_bbox.getExtentLocal() / 2.0; | ||
492 | |||
493 | LLViewerObject* object = objects[i]; | ||
494 | |||
495 | LLBBox this_bbox = original_bboxes[object]; | ||
496 | LLVector3 this_corner = this_bbox.getCenterAgent() - | ||
497 | direction * this_bbox.getExtentLocal() / 2.0; | ||
498 | |||
499 | // for packing, we cycle over several possible positions, taking the smallest that does not overlap | ||
500 | F32 smallest = direction * 9999999; // 999999 guarenteed not to be the smallest | ||
501 | for (S32 j = 0; j <= i; j++) | ||
502 | { | ||
503 | // how far must it move? | ||
504 | LLVector3 delta = target_corner - this_corner; | ||
505 | |||
506 | // new position moves only on one axis, please | ||
507 | LLVector3 delta_one_axis = LLVector3(0,0,0); | ||
508 | delta_one_axis.mV[axis] = delta.mV[axis]; | ||
509 | |||
510 | LLVector3 new_position = this_bbox.getCenterAgent() + delta_one_axis; | ||
511 | |||
512 | // construct the new bbox | ||
513 | LLBBox new_bbox = LLBBox(new_position, LLQuaternion(), LLVector3(), LLVector3()); | ||
514 | new_bbox.addPointLocal(this_bbox.getExtentLocal() / 2.0); | ||
515 | new_bbox.addPointLocal(-1.0 * this_bbox.getExtentLocal() / 2.0); | ||
516 | |||
517 | // check to see if it overlaps the previously placed objects | ||
518 | BOOL overlap = FALSE; | ||
519 | |||
520 | llwarns << "i=" << i << " j=" << j << llendl; | ||
521 | |||
522 | if (!mForce) // well, don't check if in force mode | ||
523 | { | ||
524 | for (S32 k = 0; k < i; k++) | ||
525 | { | ||
526 | LLViewerObject* other_object = objects[k]; | ||
527 | LLBBox other_bbox = new_bboxes[other_object]; | ||
528 | |||
529 | BOOL overlaps_this = bbox_overlap(other_bbox, new_bbox); | ||
530 | |||
531 | if (overlaps_this) | ||
532 | { | ||
533 | llwarns << "overlap" << new_bbox.getCenterAgent() << other_bbox.getCenterAgent() << llendl; | ||
534 | llwarns << "extent" << new_bbox.getExtentLocal() << other_bbox.getExtentLocal() << llendl; | ||
535 | } | ||
536 | |||
537 | overlap = (overlap || overlaps_this); | ||
538 | } | ||
539 | } | ||
540 | |||
541 | if (!overlap) | ||
542 | { | ||
543 | F32 this_value = (new_bbox.getCenterAgent() - | ||
544 | direction * new_bbox.getExtentLocal() / 2.0).mV[axis]; | ||
545 | |||
546 | if (direction * this_value < direction * smallest) | ||
547 | { | ||
548 | smallest = this_value; | ||
549 | // store it | ||
550 | new_bboxes[object] = new_bbox; | ||
551 | } | ||
552 | } | ||
553 | |||
554 | // update target for next time through the loop | ||
555 | if (j < (S32)objects.size()) | ||
556 | { | ||
557 | LLBBox next_bbox = new_bboxes[objects[j]]; | ||
558 | target_corner = next_bbox.getCenterAgent() + | ||
559 | direction * next_bbox.getExtentLocal() / 2.0; | ||
560 | } | ||
561 | } | ||
562 | } | ||
563 | |||
564 | |||
565 | // now move them | ||
566 | for (S32 i = 0; i < (S32)objects.size(); i++) | ||
567 | { | ||
568 | LLViewerObject* object = objects[i]; | ||
569 | |||
570 | LLBBox original_bbox = original_bboxes[object]; | ||
571 | LLBBox new_bbox = new_bboxes[object]; | ||
572 | |||
573 | LLVector3 delta = new_bbox.getCenterAgent() - original_bbox.getCenterAgent(); | ||
574 | |||
575 | LLVector3 original_position = object->getPositionAgent(); | ||
576 | LLVector3 new_position = original_position + delta; | ||
577 | |||
578 | object->setPosition(new_position); | ||
579 | } | ||
580 | |||
581 | |||
582 | LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION); | ||
583 | } | ||
584 | |||
585 | |||
diff --git a/linden/indra/newview/qtoolalign.h b/linden/indra/newview/qtoolalign.h new file mode 100644 index 0000000..b2c18b7 --- /dev/null +++ b/linden/indra/newview/qtoolalign.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /** | ||
2 | * @file qtoolalign.h | ||
3 | * @brief A tool to align objects | ||
4 | * @author Karl Stiefvater (Qarl) | ||
5 | * | ||
6 | * Karl has given permission to use this code under the terms of | ||
7 | * the GNU GPL v2 plus FLOSS exception and/or the GNU LGPL v2.1. | ||
8 | * | ||
9 | * Backported for Viewer 1.X code base by Jacek Antonelli. | ||
10 | */ | ||
11 | |||
12 | #ifndef Q_QTOOLALIGN_H | ||
13 | #define Q_QTOOLALIGN_H | ||
14 | |||
15 | #include "lltool.h" | ||
16 | #include "llbbox.h" | ||
17 | |||
18 | class LLViewerObject; | ||
19 | class LLPickInfo; | ||
20 | class LLToolSelectRect; | ||
21 | |||
22 | class QToolAlign | ||
23 | : public LLTool, public LLSingleton<QToolAlign> | ||
24 | { | ||
25 | public: | ||
26 | QToolAlign(); | ||
27 | virtual ~QToolAlign(); | ||
28 | |||
29 | virtual void handleSelect(); | ||
30 | virtual void handleDeselect(); | ||
31 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); | ||
32 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); | ||
33 | virtual void render(); | ||
34 | |||
35 | static void pickCallback(const LLPickInfo& pick_info); | ||
36 | |||
37 | private: | ||
38 | void align(); | ||
39 | void computeManipulatorSize(); | ||
40 | void renderManipulators(); | ||
41 | BOOL findSelectedManipulator(S32 x, S32 y); | ||
42 | |||
43 | LLBBox mBBox; | ||
44 | F32 mManipulatorSize; | ||
45 | S32 mHighlightedAxis; | ||
46 | F32 mHighlightedDirection; | ||
47 | BOOL mForce; | ||
48 | }; | ||
49 | |||
50 | #endif // Q_QTOOLALIGN_H | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_teleport_history.xml b/linden/indra/newview/skins/default/xui/en-us/floater_teleport_history.xml index db36df5..13956e2 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_teleport_history.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_teleport_history.xml | |||
@@ -1,6 +1,6 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" | 2 | <floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" |
3 | min_width="500" min_height="250" width="500" height="250" name="teleporthistory" | 3 | min_width="600" min_height="250" width="600" height="250" name="teleporthistory" |
4 | rect_control="FloaterTeleportHistoryRect" title="Teleport History"> | 4 | rect_control="FloaterTeleportHistoryRect" title="Teleport History"> |
5 | <tab_container label="TPlistTabs" bottom="40" height="185" left="5" follows="left|top|right|bottom" mouse_opaque="false" name="tplisttabs" | 5 | <tab_container label="TPlistTabs" bottom="40" height="185" left="5" follows="left|top|right|bottom" mouse_opaque="false" name="tplisttabs" |
6 | tab_min_width="50" tab_position="top" width="480" right="-10" bg_opaque_color="0,0,0,0.0"> | 6 | tab_min_width="50" tab_position="top" width="480" right="-10" bg_opaque_color="0,0,0,0.0"> |
@@ -39,6 +39,10 @@ | |||
39 | height="20" label="Show On Map" label_selected="Show On Map" | 39 | height="20" label="Show On Map" label_selected="Show On Map" |
40 | left_delta="100" mouse_opaque="true" name="show_on_map" | 40 | left_delta="100" mouse_opaque="true" name="show_on_map" |
41 | tool_tip="Center map on this location" width="125" /> | 41 | tool_tip="Center map on this location" width="125" /> |
42 | <button bottom_delta="0" enabled="true" follows="left|bottom" font="SansSerif" halign="center" | ||
43 | height="20" label="Clear History" | ||
44 | left_delta="135" mouse_opaque="true" name="clear_history" | ||
45 | tool_tip="Clear Saved Teleport History" width="125" /> | ||
42 | <button bottom_delta="0" enabled="false" follows="bottom|right" font="SansSerif" | 46 | <button bottom_delta="0" enabled="false" follows="bottom|right" font="SansSerif" |
43 | height="20" label="Copy SLURL to clipboard" left="-190" name="copy_slurl" | 47 | height="20" label="Copy SLURL to clipboard" left="-190" name="copy_slurl" |
44 | tool_tip="Copies current location as SLURL to be used on the web." | 48 | tool_tip="Copies current location as SLURL to be used on the web." |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml index 0cb4a59..d7a2013 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml | |||
@@ -79,6 +79,10 @@ | |||
79 | <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" | 79 | <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" |
80 | initial_value="false" label="Select faces to texture" left="4" mouse_opaque="true" | 80 | initial_value="false" label="Select faces to texture" left="4" mouse_opaque="true" |
81 | name="radio select face" radio_style="true" width="114" /> | 81 | name="radio select face" radio_style="true" width="114" /> |
82 | <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" | ||
83 | initial_value="false" label="Align (Shift to Pack)" left="4" mouse_opaque="true" | ||
84 | name="radio align" radio_style="true" width="114" | ||
85 | tool_tip="Align aligns all selected prims' edges along an axis, Pack moves all selected prims' edges so they're touching" /> | ||
82 | <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top" | 86 | <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top" |
83 | font="SansSerifSmall" height="16" initial_value="false" | 87 | font="SansSerifSmall" height="16" initial_value="false" |
84 | label="Edit linked parts" left="4" mouse_opaque="true" | 88 | label="Edit linked parts" left="4" mouse_opaque="true" |
@@ -321,6 +325,12 @@ | |||
321 | mouse_opaque="true" name="prim_count" v_pad="0" width="143"> | 325 | mouse_opaque="true" name="prim_count" v_pad="0" width="143"> |
322 | Primitives: [COUNT] | 326 | Primitives: [COUNT] |
323 | </text> | 327 | </text> |
328 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
329 | bottom="-168" left="118" drop_shadow_visible="true" follows="left|top" | ||
330 | font="SansSerifSmall" h_pad="0" halign="right" height="16" | ||
331 | mouse_opaque="true" name="link_num" v_pad="0" width="143"> | ||
332 | Link number: [NUMBER] | ||
333 | </text> | ||
324 | 334 | ||
325 | <!-- Sub-tabs --> | 335 | <!-- Sub-tabs --> |
326 | 336 | ||
@@ -1085,7 +1095,7 @@ | |||
1085 | Glow: | 1095 | Glow: |
1086 | </text> | 1096 | </text> |
1087 | <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" | 1097 | <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" |
1088 | increment="0.1" initial_val="0" left="180" max_val="1" | 1098 | increment="0.05" initial_val="0" left="180" max_val="1" |
1089 | min_val="0" mouse_opaque="true" name="glow" width="58" /> | 1099 | min_val="0" mouse_opaque="true" name="glow" width="58" /> |
1090 | <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16" | 1100 | <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16" |
1091 | initial_value="false" label="Full bright" left="180" mouse_opaque="true" | 1101 | initial_value="false" label="Full bright" left="180" mouse_opaque="true" |
@@ -1202,13 +1212,13 @@ | |||
1202 | mouse_opaque="true" name="tex scale" v_pad="0" width="160"> | 1212 | mouse_opaque="true" name="tex scale" v_pad="0" width="160"> |
1203 | Repeats Per Face: | 1213 | Repeats Per Face: |
1204 | </text> | 1214 | </text> |
1205 | <spinner bottom="-178" decimal_digits="3" follows="left|top" height="16" increment="0.1" | 1215 | <spinner bottom="-178" decimal_digits="3" follows="left|top" height="16" increment="0.05" |
1206 | initial_val="0" label="Horizontal (U):" label_width="90" left="20" | 1216 | initial_val="0" label="Horizontal (U):" label_width="90" left="20" |
1207 | max_val="10000" min_val="0" mouse_opaque="true" name="TexScaleU" width="160" /> | 1217 | max_val="10000" min_val="0" mouse_opaque="true" name="TexScaleU" width="160" /> |
1208 | <check_box bottom="-179" follows="left|top" font="SansSerifSmall" height="16" | 1218 | <check_box bottom="-179" follows="left|top" font="SansSerifSmall" height="16" |
1209 | initial_value="false" label="Flip" left_delta="170" mouse_opaque="true" | 1219 | initial_value="false" label="Flip" left_delta="170" mouse_opaque="true" |
1210 | name="checkbox flip s" width="70" /> | 1220 | name="checkbox flip s" width="70" /> |
1211 | <spinner bottom="-196" decimal_digits="3" follows="left|top" height="16" increment="0.1" | 1221 | <spinner bottom="-196" decimal_digits="3" follows="left|top" height="16" increment="0.05" |
1212 | initial_val="0" label="Vertical (V):" label_width="90" left="20" | 1222 | initial_val="0" label="Vertical (V):" label_width="90" left="20" |
1213 | max_val="10000" min_val="0" mouse_opaque="true" name="TexScaleV" width="160" /> | 1223 | max_val="10000" min_val="0" mouse_opaque="true" name="TexScaleV" width="160" /> |
1214 | <check_box bottom="-197" follows="left|top" font="SansSerifSmall" height="16" | 1224 | <check_box bottom="-197" follows="left|top" font="SansSerifSmall" height="16" |
@@ -1247,11 +1257,11 @@ | |||
1247 | mouse_opaque="true" name="tex offset" v_pad="0" width="160"> | 1257 | mouse_opaque="true" name="tex offset" v_pad="0" width="160"> |
1248 | Offset: | 1258 | Offset: |
1249 | </text> | 1259 | </text> |
1250 | <spinner bottom="-308" decimal_digits="3" follows="left|top" height="16" increment="0.1" | 1260 | <spinner bottom="-308" decimal_digits="3" follows="left|top" height="16" increment="0.05" |
1251 | initial_val="0" label="Horizontal (U):" label_width="90" left="20" | 1261 | initial_val="0" label="Horizontal (U):" label_width="90" left="20" |
1252 | max_val="1" min_val="-1" mouse_opaque="true" name="TexOffsetU" width="160" /> | 1262 | max_val="1" min_val="-1" mouse_opaque="true" name="TexOffsetU" width="160" /> |
1253 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 1263 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
1254 | increment="0.1" initial_val="0" label="Vertical (V):" label_width="90" | 1264 | increment="0.05" initial_val="0" label="Vertical (V):" label_width="90" |
1255 | left="20" max_val="1" min_val="-1" mouse_opaque="true" name="TexOffsetV" | 1265 | left="20" max_val="1" min_val="-1" mouse_opaque="true" name="TexOffsetV" |
1256 | width="160" /> | 1266 | width="160" /> |
1257 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 1267 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/fonts.xml b/linden/indra/newview/skins/default/xui/en-us/fonts.xml index 5564079..7343ac2 100644 --- a/linden/indra/newview/skins/default/xui/en-us/fonts.xml +++ b/linden/indra/newview/skins/default/xui/en-us/fonts.xml | |||
@@ -153,7 +153,7 @@ | |||
153 | /> | 153 | /> |
154 | <font_size name="Small" | 154 | <font_size name="Small" |
155 | comment="Size of small font (points, or 1/72 of an inch)" | 155 | comment="Size of small font (points, or 1/72 of an inch)" |
156 | size="8" | 156 | size="8.5" |
157 | /> | 157 | /> |
158 | </fonts> | 158 | </fonts> |
159 | 159 | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/notifications.xml b/linden/indra/newview/skins/default/xui/en-us/notifications.xml index d7b078c..0ac7401 100644 --- a/linden/indra/newview/skins/default/xui/en-us/notifications.xml +++ b/linden/indra/newview/skins/default/xui/en-us/notifications.xml | |||
@@ -902,32 +902,32 @@ Would you like to disable all popups which can be skipped? | |||
902 | </notification> | 902 | </notification> |
903 | 903 | ||
904 | <notification | 904 | <notification |
905 | icon="alertmodal.tga" | 905 | icon="notify.tga" |
906 | name="CacheWillClear" | 906 | name="CacheWillClear" |
907 | type="alertmodal"> | 907 | type="notify"> |
908 | Cache will be cleared after you restart [VIEWER_NAME]. | 908 | Cache will be cleared after you restart [VIEWER_NAME]. |
909 | </notification> | 909 | </notification> |
910 | 910 | ||
911 | <notification | 911 | <notification |
912 | icon="alertmodal.tga" | 912 | icon="notify.tga" |
913 | name="CacheWillBeMoved" | 913 | name="CacheWillBeMoved" |
914 | type="alertmodal"> | 914 | type="notify"> |
915 | Cache will be moved after you restart [VIEWER_NAME]. | 915 | Cache will be moved after you restart [VIEWER_NAME]. |
916 | 916 | ||
917 | Note: This will clear the cache. | 917 | Note: This will clear the cache. |
918 | </notification> | 918 | </notification> |
919 | 919 | ||
920 | <notification | 920 | <notification |
921 | icon="alertmodal.tga" | 921 | icon="notify.tga" |
922 | name="ChangeConnectionPort" | 922 | name="ChangeConnectionPort" |
923 | type="alertmodal"> | 923 | type="notify"> |
924 | Port settings take effect after you restart [VIEWER_NAME]. | 924 | Port settings take effect after you restart [VIEWER_NAME]. |
925 | </notification> | 925 | </notification> |
926 | 926 | ||
927 | <notification | 927 | <notification |
928 | icon="alertmodal.tga" | 928 | icon="notify.tga" |
929 | name="ChangeSkin" | 929 | name="ChangeSkin" |
930 | type="alertmodal"> | 930 | type="notify"> |
931 | The new skin will appear after you restart [VIEWER_NAME]. | 931 | The new skin will appear after you restart [VIEWER_NAME]. |
932 | </notification> | 932 | </notification> |
933 | 933 | ||
@@ -6009,8 +6009,12 @@ An object named [OBJECTFROMNAME] owned by (an unknown user) has given you a [OBJ | |||
6009 | index="1" | 6009 | index="1" |
6010 | name="Decline" | 6010 | name="Decline" |
6011 | text="Decline"/> | 6011 | text="Decline"/> |
6012 | <button | ||
6013 | index="2" | ||
6014 | name="Profile" | ||
6015 | text="Profile"/> | ||
6012 | <button | 6016 | <button |
6013 | index="2" | 6017 | index="3" |
6014 | name="Ignore" | 6018 | name="Ignore" |
6015 | text="Ignore"/> | 6019 | text="Ignore"/> |
6016 | </form> | 6020 | </form> |
@@ -6033,7 +6037,11 @@ An object named [OBJECTFROMNAME] owned by (an unknown user) has given you a [OBJ | |||
6033 | name="Decline" | 6037 | name="Decline" |
6034 | text="Decline"/> | 6038 | text="Decline"/> |
6035 | <button | 6039 | <button |
6036 | index="2" | 6040 | index="2" |
6041 | name="Profile" | ||
6042 | text="Profile"/> | ||
6043 | <button | ||
6044 | index="3" | ||
6037 | name="Ignore" | 6045 | name="Ignore" |
6038 | text="Ignore"/> | 6046 | text="Ignore"/> |
6039 | </form> | 6047 | </form> |
@@ -7000,6 +7008,7 @@ IM history could not be found for [NAME]. | |||
7000 | type="alert"> | 7008 | type="alert"> |
7001 | Show Look At is a debug setting that displays where an avatar's head is looking. Be aware: this will *NOT* show where an avatar's camera is actually pointed. This setting should not be relied on for any form of privacy! | 7009 | Show Look At is a debug setting that displays where an avatar's head is looking. Be aware: this will *NOT* show where an avatar's camera is actually pointed. This setting should not be relied on for any form of privacy! |
7002 | <usetemplate | 7010 | <usetemplate |
7011 | ignoretext="When setting Show Look At" | ||
7003 | name="okignore" | 7012 | name="okignore" |
7004 | yestext="OK"/> | 7013 | yestext="OK"/> |
7005 | </notification> | 7014 | </notification> |
@@ -7095,8 +7104,8 @@ Apply this region's settings? ("Ignore" will ignore all region setting | |||
7095 | 7104 | ||
7096 | <notification | 7105 | <notification |
7097 | name="ChangeFont" | 7106 | name="ChangeFont" |
7098 | icon="alertmodal.tga" | 7107 | icon="notify.tga" |
7099 | type="alertmodal"> | 7108 | type="notify"> |
7100 | The new font will appear after you restart [VIEWER_NAME]. | 7109 | The new font will appear after you restart [VIEWER_NAME]. |
7101 | </notification> | 7110 | </notification> |
7102 | 7111 | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_fonts.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_fonts.xml index 5865bec..c64ce9f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_fonts.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_fonts.xml | |||
@@ -46,4 +46,14 @@ | |||
46 | Preview: The quick brown fox jumped over the lazy dog. :) | 46 | Preview: The quick brown fox jumped over the lazy dog. :) |
47 | </text> | 47 | </text> |
48 | 48 | ||
49 | |||
50 | <spinner name="font_mult" label="Font size multiplier:" label_width="130" | ||
51 | bottom="-280" left="20" height="16" width="180" follows="left|top" | ||
52 | decimal_digits="2" increment="0.01" max_val="3.0" min_val="0.1" | ||
53 | tool_tip="Multiply all font sizes by this amount." /> | ||
54 | |||
55 | <check_box name="font_round" follows="left|top" | ||
56 | bottom="-300" left="20" height="16" width="300" | ||
57 | label="Force integer font sizes (may fix blurry fonts)" /> | ||
58 | |||
49 | </panel> | 59 | </panel> |