diff options
62 files changed, 1012 insertions, 620 deletions
@@ -36,7 +36,7 @@ indra/newview/fmod.dll indra/newview/mozilla-theme indra/newview/mozilla-universal-darwin.tgz indra/newview/res/ll_icon.* -indra/newview/res-sdl +indra/newview/res-sdl/ll_icon.* indra/newview/vivox-runtime indra/server-linux-* indra/temp @@ -1,355 +1,300 @@ -bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release 003dd9461bfa479049afcc34545ab3431b147c7c v2start -08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1 -0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2 -12769e547e30067d494a6c01479a18107366ce2f beta-5 +52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3 +d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0 +7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4 +7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa +d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5 +d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo +b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6 17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5 -19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1 -1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3 3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4 -3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1 -434973a76ab2755f98ab55e1afc193e16692d5c5 2-1-1-beta-2 -46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start +12769e547e30067d494a6c01479a18107366ce2f beta-5 4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0 -52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3 668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1 -6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2 -7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4 -7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa +08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1 80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start -87bfaf8c76f9b22d9c65d4b315358861be87c863 2-1-1-release +46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start +3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1 +0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2 +1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3 +c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4 b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release -b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6 +19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1 +6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2 bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release -c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4 -d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo -d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5 -d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0 +bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release c6e6324f5be1401f077ad18a4a0f6b46451c2f7b last_sprint -7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3 7076e22f9f43f479a4ea75eac447a36364bead5a 2.2.0-beta1 +7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1 +7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3 9822eb3e25f7fe0c28ffd8aba45c507caa383cbc 2.2.0-beta2 +9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2 b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3 +b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3 00a831292231faad7e44c69f76cb96f175b8dfad 2.2.0-beta4 -98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-beta1 1415e6538d54fd5d568ee88343424d57c6803c2c 2.2.0-release +1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release 98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-start a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1 +a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1 db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2 +db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2 6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3 6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release +6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release +6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3 dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start -dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1 -dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1 3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1 +3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1 25bd6007e3d2fc15db9326ed4b18a24a5969a46a 2.4.0-beta2 +25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2 1ed382c6a08ba3850b6ce9061bc551ddece0ea07 2.4.0-release +1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release a82e5b1e22c7f90e3c7977d146b80588f004ed0d 2.5.0-start -76f586a8e22b1abe6b2339758c8ac0fa718975de 76f586a8e22b -76f586a8e22b1abe6b2339758c8ac0fa718975de 76f586a8e22b -0000000000000000000000000000000000000000 76f586a8e22b -0000000000000000000000000000000000000000 76f586a8e22b -345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b 345b17e7cf630db77e840b4fe3451bd476d750a3 2.5.0-beta1 -345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b -0000000000000000000000000000000000000000 76f586a8e22b -54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2 -b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base -7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1 -9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2 -b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3 -1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release -a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1 -db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release -3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1 -25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2 -1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release 345b17e7cf630db77e840b4fe3451bd476d750a3 DRTVWR-32_2.5.0-beta1 +54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2 +54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33--2.5.0beta2 54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33_2.5.0-beta2 b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-beta3 -b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3 b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-release b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-31_2.5.0-release -3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work +b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3 +b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base 63a6aedfce785a6c760377bf685b2dae616797d2 2.5.1-start 4dede9ae1ec74d41f6887719f6f1de7340d8578d 2.5.1-release 4dede9ae1ec74d41f6887719f6f1de7340d8578d DRTVWR-37_2.5.1-release -b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release b53a0576eec80614d7767ed72b40ed67aeff27c9 2.5.2-release -92e58e51776a4f8c29069b1a62ff21454d2085f0 2.6.0-start -f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start +b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release 4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start 9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1 9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1 -9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2 9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2 +9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2 +c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1 c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1 -c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1 -c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release -c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release 56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start -42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release -42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release -d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1 d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1 -214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release -214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release +d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1 +42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release +42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release +c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release +c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release 52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start -d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1 d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1 -0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2 +d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1 0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2 -7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1 +0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2 +3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work +214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release +214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release 7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1 +7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1 +8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release +8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release 800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start -bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1 bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1 +bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1 5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start -beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 -bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156 +dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release +dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1 -11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start +beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 +be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release +be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start -77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1 77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-beta1 -be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release -be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release -dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release -dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release -8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release -8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release -77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release 77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release +77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release +77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1 8835e0e3c0d3a48244c287bc05811dfc2fba43ec 2.7.0-start -43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1 43c7ee846b7eed80786acbbf35d03bd016a3e85d 2.7.0-beta1 +43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1 54fd44ac92e4c61435ea33effe093a3527e18d98 2.7.1-start -0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1 0c4d0c24278074f219e5a32e72b449e78301d11b 2.7.1-beta1 -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release +0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1 9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start -e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1 e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1 +e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1 6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start +fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release +fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release +fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release +fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release 6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start -be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1 be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1 -057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release -057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1 -be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1 -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release 19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start -09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1 09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1 +09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1 +e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start -502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start -c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188 -888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175 -2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155 -6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release -6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1 -e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 -493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release -493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release -2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 +057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release +057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release +6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release +6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release +502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start 2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1 -29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release -29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release -4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix -4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix +2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 +493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release +493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release 54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start -29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release -29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start -599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 +29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release +29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release +4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix +4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix 599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 -fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release -fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release -46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start -b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 -b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1 +599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start +b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1 +b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 +fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release +fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release 82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start -364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1 364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1 +364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1 f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release -1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release -42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1 42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1 -e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2 +42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1 +1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release +1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2 +e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2 b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release -0000000000000000000000000000000000000000 DRTVWR-78_3.0.0-release -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release -6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1 6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1 -586907287be581817b2422b5137971b22d54ea48 3.0.4-start -61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 +6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1 61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2 -0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release +61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 +586907287be581817b2422b5137971b22d54ea48 3.0.4-start 0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release +0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release 92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start -2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1 2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1 -dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2 -dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2 -dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2 -bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2 -dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2 +2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1 bc01ee26fd0f1866e266429e85f76340523e91f1 3.1.0-beta2 -ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release +bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2 ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 3.1.0-release +ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release a8230590e28e4f30f5105549e0e43211d9d55711 3.2.0-start -e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1 e440cd1dfbd128d7d5467019e497f7f803640ad6 3.2.0-beta1 -9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2 +e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1 9bcc2b7176634254e501e3fb4c5b56c1f637852e 3.2.0-beta2 -2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3 +9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2 2a13d30ee50ccfed50268238e36bb90d738ccc9e 3.2.0-beta3 -3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release -3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start -3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release +2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3 3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start 3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release -3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1 +c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start 9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1 -523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1 +9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1 +40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start 523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1 -80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start -a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release +523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1 a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release +a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release +80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start +3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1 3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start -a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release -a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release 3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1 -3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1 -8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release -bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release -3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1 +bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release +8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start 3d2d5d244c6398a4214c666d5dd3965b0918709a 3.2.5-beta1 -65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2 +3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1 65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d 3.2.5-beta2 -c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release +65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2 c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release +c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release 2174ed1c7129562428a5cfe8651ed77b8d26ae18 3.2.6-start +286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1 286d73ff5c19f6c00e023dc1b60975ed6bbe2872 DRTVWR-109_3.2.6-beta1 4891c46a56fed7512c783b9cbe7cb7260727bf0c 3.2.7-start -286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1 -c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release -c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release -3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1 3d75c836d178c7c7e788f256afe195f6cab764a2 3.2.7-beta1 +3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1 89980333c99dbaf1787fe20784f1d8849e9b5d4f 3.2.8-start -16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1 -37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start 16f8e2915f3f2e4d732fb3125daf229cb0fd1875 3.2.8-beta1 -089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 -987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2 +16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1 987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2 -51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release +987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2 51b2fd52e36aab8f670e0874e7e1472434ec4b4a 3.2.8-release -e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1 +51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release +37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start e9c82fca5ae6fb8a8af29012d78fb194a29323f3 3.2.9-beta1 -a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2 +e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1 a01ef9bed28627f4ca543fbc1d70c79cc297a90f 3.2.9-beta2 -987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2 -d5f263687f43f278107363365938f0a214920a4b DRTVWR-119 +a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2 d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1 -5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate -5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release d5f263687f43f278107363365938f0a214920a4b 3.3.0-start -dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate d5f263687f43f278107363365938f0a214920a4b DRTVWR-119 -d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1 -5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate 5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release -28b95a6a28dca3338d9a1f4f204b96678df9f6a5 viewer-beta-candidate -b43cd25be49e3984ff5361cefad020e069131d98 3.3.1-start -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125 -dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate 3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 3.3.1-start +3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125 28b95a6a28dca3338d9a1f4f204b96678df9f6a5 3.3.1-beta1 -1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate 1dc545e44617975da2a4a32fe303386c687a6ca1 3.3.1-beta2 1dc545e44617975da2a4a32fe303386c687a6ca1 DRTVWR-139 -5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate -c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate +1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate c623bbc854b6f7ee1b33a3718f76715046aa2937 3.3.1-release d29a260119f8d5a5d168e25fed0c7ea6b3f40161 3.3.2-beta1 675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-beta2 -c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate -675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate 675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-release -675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate -050e48759337249130f684b4a21080b683f61732 DRTVWR-168 -b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171 -c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163 -600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 -600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 -9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 -a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 -24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153 15e90b52dc0297921b022b90d10d797436b8a1bd viewer-release-candidate +bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156 6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1 +2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155 +24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153 5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1 f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1 -1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144 f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144 2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164 +600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165 fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2 af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169 4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3 6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release -57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176 +a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 +9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 +089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 +c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163 +b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171 +050e48759337249130f684b4a21080b683f61732 DRTVWR-168 09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170 -005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167 -f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 3.3.4-beta1 f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158 -f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 3.3.4-beta1 -cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174 -bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173 f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1 +bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173 +cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174 82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2 +57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176 eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177 -4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179 a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3 4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180 -9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184 5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183 6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4 +9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184 ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5 28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release +005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167 +888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175 +4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179 a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182 1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1 -81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186 -cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 +47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190 +421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 +33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195 +e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193 +7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196 +ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198 +507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197 +b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2 +37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200 +182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3 +6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199 +7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2 +7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201 +84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4 diff --git a/autobuild.xml b/autobuild.xml index 0ff952be5b..b7a73f2c75 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1254,11 +1254,11 @@ <key>archive</key> <map> <key>hash</key> - <string>de22a97b276913a6dd05838b7fe297af</string> + <string>0578fa67ef9906c6aaa326f51db2669f</string> <key>hash_algorithm</key> <string>md5</string> <key>url</key> - <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120725.tar.bz2</string> + <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string> </map> <key>name</key> <string>darwin</string> @@ -1268,9 +1268,9 @@ <key>archive</key> <map> <key>hash</key> - <string>d2dfbbc11aac34ebd551df86524c8c9c</string> + <string>b706fdeed4ce2182d434043dc33d9d1d</string> <key>url</key> - <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120725.tar.bz2</string> + <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120814.tar.bz2</string> </map> <key>name</key> <string>linux</string> @@ -1280,9 +1280,9 @@ <key>archive</key> <map> <key>hash</key> - <string>99abccc5d117ab82cadb8cff0d85b867</string> + <string>0cebd359ea732a7db363d88f9886a1ef</string> <key>url</key> - <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120725.tar.bz2</string> + <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string> </map> <key>name</key> <string>windows</string> @@ -1306,11 +1306,11 @@ <key>archive</key> <map> <key>hash</key> - <string>3528620230fbd288fcc9dbbd8d8a6b59</string> + <string>3ae798d4dfb54a1d806ee5f8b31f7626</string> <key>hash_algorithm</key> <string>md5</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120725.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string> </map> <key>name</key> <string>darwin</string> @@ -1320,9 +1320,9 @@ <key>archive</key> <map> <key>hash</key> - <string>69d188f72f9494b0e74c94ca0496f618</string> + <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120725.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string> </map> <key>name</key> <string>linux</string> @@ -1332,9 +1332,9 @@ <key>archive</key> <map> <key>hash</key> - <string>61fc2b84ad53cf8d98d1784c31f9928e</string> + <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120725.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string> </map> <key>name</key> <string>windows</string> diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index a6f69a09e9..543075db5b 100644..100755 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -201,6 +201,15 @@ FUNCTION(LL_ADD_INTEGRATION_TEST endif(TEST_DEBUG) ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files}) SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") + if (WINDOWS) + set_target_properties(INTEGRATION_TEST_${testname} + PROPERTIES + LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc" + LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO" + LINK_FLAGS_RELEASE "" + ) + endif(WINDOWS) + if(STANDALONE) SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}") endif(STANDALONE) diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 17e211cb99..d4694ad37a 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -24,7 +24,7 @@ endif (LINUX) add_definitions(${TCMALLOC_FLAG}) -set(LLCOMMON_LINK_SHARED ON CACHE BOOL "Build the llcommon target as a shared library.") +set(LLCOMMON_LINK_SHARED OFF CACHE BOOL "Build the llcommon target as a shared library.") if(LLCOMMON_LINK_SHARED) add_definitions(-DLL_COMMON_LINK_SHARED=1) endif(LLCOMMON_LINK_SHARED) diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index 057257057f..b82d52797e 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -40,7 +40,6 @@ S32 LLPerfBlock::sStatsFlags = LLPerfBlock::LLSTATS_NO_OPTIONAL_STATS; // Control what is being recorded LLPerfBlock::stat_map_t LLPerfBlock::sStatMap; // Map full path string to LLStatTime objects, tracks all active objects std::string LLPerfBlock::sCurrentStatPath = ""; // Something like "/total_time/physics/physics step" -LLStat::stat_map_t LLStat::sStatList; //------------------------------------------------------------------------ // Live config file to trigger stats logging @@ -771,13 +770,19 @@ void LLStat::init() if (!mName.empty()) { - stat_map_t::iterator iter = sStatList.find(mName); - if (iter != sStatList.end()) + stat_map_t::iterator iter = getStatList().find(mName); + if (iter != getStatList().end()) llwarns << "LLStat with duplicate name: " << mName << llendl; - sStatList.insert(std::make_pair(mName, this)); + getStatList().insert(std::make_pair(mName, this)); } } +LLStat::stat_map_t& LLStat::getStatList() +{ + static LLStat::stat_map_t stat_list; + return stat_list; +} + LLStat::LLStat(const U32 num_bins, const BOOL use_frame_timer) : mUseFrameTimer(use_frame_timer), mNumBins(num_bins) @@ -803,10 +808,10 @@ LLStat::~LLStat() if (!mName.empty()) { // handle multiple entries with the same name - stat_map_t::iterator iter = sStatList.find(mName); - while (iter != sStatList.end() && iter->second != this) + stat_map_t::iterator iter = getStatList().find(mName); + while (iter != getStatList().end() && iter->second != this) ++iter; - sStatList.erase(iter); + getStatList().erase(iter); } } diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h index b877432e86..1a8404cc07 100644 --- a/indra/llcommon/llstat.h +++ b/indra/llcommon/llstat.h @@ -263,9 +263,9 @@ class LL_COMMON_API LLStat { private: typedef std::multimap<std::string, LLStat*> stat_map_t; - static stat_map_t sStatList; void init(); + static stat_map_t& getStatList(); public: LLStat(U32 num_bins = 32, BOOL use_frame_timer = FALSE); @@ -342,8 +342,8 @@ public: static LLStat* getStat(const std::string& name) { // return the first stat that matches 'name' - stat_map_t::iterator iter = sStatList.find(name); - if (iter != sStatList.end()) + stat_map_t::iterator iter = getStatList().find(name); + if (iter != getStatList().end()) return iter->second; else return NULL; diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 97f2792686..ff31f7665e 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -651,8 +651,10 @@ void LLAvatarNameCache::fireSignal(const LLUUID& agent_id, signal(agent_id, av_name); } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) { + callback_connection_t connection; + if (sRunning) { // ...only do immediate lookups when cache is running @@ -668,7 +670,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) { // ...name already exists in cache, fire callback now fireSignal(agent_id, slot, av_name); - return; + return connection; } } } @@ -681,7 +683,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) LLAvatarName av_name; buildLegacyName(full_name, &av_name); fireSignal(agent_id, slot, av_name); - return; + return connection; } } } @@ -698,15 +700,17 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) { // ...new callback for this id callback_signal_t* signal = new callback_signal_t(); - signal->connect(slot); + connection = signal->connect(slot); sSignalMap[agent_id] = signal; } else { // ...existing callback, bind additional slot callback_signal_t* signal = sig_it->second; - signal->connect(slot); + connection = signal->connect(slot); } + + return connection; } diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 59c1329ffa..064942fe53 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -71,10 +71,11 @@ namespace LLAvatarNameCache void (const LLUUID& agent_id, const LLAvatarName& av_name)> callback_signal_t; typedef callback_signal_t::slot_type callback_slot_t; + typedef boost::signals2::connection callback_connection_t; // Fetches name information and calls callback. // If name information is in cache, callback will be called immediately. - void get(const LLUUID& agent_id, callback_slot_t slot); + callback_connection_t get(const LLUUID& agent_id, callback_slot_t slot); // Allow display names to be explicitly disabled for testing. void setUseDisplayNames(bool use); diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index f57790aff6..11004fe390 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -288,7 +288,7 @@ void LLFolderView::addFolder( LLFolderViewFolder* folder) //{ // mFolders.insert(mFolders.begin(), folder); //} -} + } void LLFolderView::closeAllFolders() { @@ -311,7 +311,7 @@ void LLFolderView::openTopLevelFolders() // *width should be 0 // conform show folder state works S32 LLFolderView::arrange( S32* unused_width, S32* unused_height ) - { + { mMinWidth = 0; S32 target_height; @@ -340,7 +340,7 @@ void LLFolderView::filter( LLFolderViewFilter& filter ) filter.setFilterCount(llclamp(LLUI::sSettingGroups["config"]->getS32("FilterItemsPerFrame"), 1, 5000)); getViewModelItem()->filter(filter); - } +} void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent) { @@ -761,8 +761,8 @@ void LLFolderView::removeSelectedItems() { // change selection on successful delete setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, mParentPanel->hasFocus()); + } } - } arrangeAll(); } else if (count > 1) @@ -858,7 +858,7 @@ void LLFolderView::propertiesSelectedItems( void ) // multi_propertiesp->openFloater(LLSD()); // } //} - } +} void LLFolderView::autoOpenItem( LLFolderViewFolder* item ) @@ -1718,14 +1718,13 @@ void LLFolderView::update() // filter to determine visibility before arranging filter(getFolderViewModel()->getFilter()); - // Clear the modified setting on the filter only if the filter count is non-zero after running the filter process // Note: if the filter count is zero, then the filter most likely halted before completing the entire set of items if (getFolderViewModel()->getFilter().isModified() && (getFolderViewModel()->getFilter().getFilterCount() > 0)) { getFolderViewModel()->getFilter().clearModified(); } - + // automatically show matching items, and select first one if we had a selection if (mNeedsAutoSelect) { @@ -2033,31 +2032,31 @@ void LLFolderView::onRenamerLost() } } -S32 LLFolderView::getItemHeight() -{ - if(!hasVisibleChildren()) -{ - //We need to display status textbox, let's reserve some place for it - return llmax(0, mStatusTextBox->getTextPixelHeight()); -} - return 0; -} - LLFolderViewItem* LLFolderView::getNextUnselectedItem() { LLFolderViewItem* last_item = *mSelectedItems.rbegin(); LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE); while(new_selection && new_selection->isSelected()) -{ + { new_selection = new_selection->getNextOpenNode(FALSE); -} + } if (!new_selection) -{ + { new_selection = last_item->getPreviousOpenNode(FALSE); while (new_selection && (new_selection->isInSelection())) - { + { new_selection = new_selection->getPreviousOpenNode(FALSE); + } } -} return new_selection; } + +S32 LLFolderView::getItemHeight() +{ + if(!hasVisibleChildren()) +{ + //We need to display status textbox, let's reserve some place for it + return llmax(0, mStatusTextBox->getTextPixelHeight()); +} + return 0; +} diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index b172359851..52923389cd 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -117,7 +117,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p) if (mViewModelItem) { mViewModelItem->setFolderViewItem(this); - } +} } BOOL LLFolderViewItem::postBuild() @@ -219,11 +219,11 @@ void LLFolderViewItem::refresh() mIconOpen = vmi.getIconOpen(); mIconOverlay = vmi.getIconOverlay(); - if (mRoot->useLabelSuffix()) - { + if (mRoot->useLabelSuffix()) + { mLabelStyle = vmi.getLabelStyle(); mLabelSuffix = vmi.getLabelSuffix(); - } +} //TODO RN: make sure this logic still fires //std::string searchable_label(mLabel); @@ -253,7 +253,7 @@ void LLFolderViewItem::arrangeAndSet(BOOL set_selection, LLFolderView* root = getRoot(); if (getParentFolder()) { - getParentFolder()->requestArrange(); + getParentFolder()->requestArrange(); } if(set_selection) { @@ -365,12 +365,12 @@ void LLFolderViewItem::selectItem(void) BOOL LLFolderViewItem::isMovable() { return getViewModelItem()->isItemMovable(); -} + } BOOL LLFolderViewItem::isRemovable() { return getViewModelItem()->isItemRemovable(); - } +} void LLFolderViewItem::destroyView() { @@ -400,14 +400,14 @@ BOOL LLFolderViewItem::remove() void LLFolderViewItem::buildContextMenu(LLMenuGL& menu, U32 flags) { getViewModelItem()->buildContextMenu(menu, flags); -} + } void LLFolderViewItem::openItem( void ) { if (mAllowOpen) { getViewModelItem()->openItem(); -} + } } void LLFolderViewItem::rename(const std::string& new_name) @@ -421,7 +421,7 @@ void LLFolderViewItem::rename(const std::string& new_name) const std::string& LLFolderViewItem::getName( void ) const { return getViewModelItem()->getName(); -} + } // LLView functionality BOOL LLFolderViewItem::handleRightMouseDown( S32 x, S32 y, MASK mask ) @@ -484,7 +484,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask ) if( (x - mDragStartX) * (x - mDragStartX) + (y - mDragStartY) * (y - mDragStartY) > drag_and_drop_threshold() * drag_and_drop_threshold() && root->getCurSelectedItem() && root->startDrag()) - { + { // RN: when starting drag and drop, clear out last auto-open root->autoOpenTest(NULL); root->setShowSelectionContext(TRUE); @@ -496,7 +496,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask ) getWindow()->setCursor(UI_CURSOR_ARROW); return TRUE; - } + } else { getWindow()->setCursor(UI_CURSOR_NOLOCKED); @@ -758,7 +758,7 @@ void LLFolderViewItem::draw() LLUIImage* box_image = default_params.selection_image; LLRect box_rect(left, top, right, bottom); box_image->draw(box_rect, sFilterBGColor); - } + } LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor; //TODO RN: implement this in terms of getColor() @@ -785,15 +785,15 @@ void LLFolderViewItem::draw() //--------------------------------------------------------------------------------// // Highlight string match // - if (filter_string_length > 0) - { + if (filter_string_length > 0) + { F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset()); - F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; + F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy, - sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - filter_string_length, S32_MAX, &right_x, FALSE ); + sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + filter_string_length, S32_MAX, &right_x, FALSE ); + } } -} const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const { @@ -1384,7 +1384,7 @@ void LLFolderViewFolder::destroyView() } LLFolderViewItem::destroyView(); -} + } // extractItem() removes the specified item from the folder, but // doesn't delete it. @@ -1418,7 +1418,7 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item ) BOOL LLFolderViewFolder::isMovable() { if( !(getViewModelItem()->isItemMovable()) ) - { + { return FALSE; } @@ -1448,7 +1448,7 @@ BOOL LLFolderViewFolder::isMovable() BOOL LLFolderViewFolder::isRemovable() { if( !(getViewModelItem()->isItemRemovable()) ) - { + { return FALSE; } @@ -1478,7 +1478,7 @@ BOOL LLFolderViewFolder::isRemovable() void LLFolderViewFolder::addItem(LLFolderViewItem* item) { if (item->getParentFolder()) - { +{ item->getParentFolder()->extractItem(item); } item->setParentFolder(this); @@ -1487,10 +1487,10 @@ void LLFolderViewFolder::addItem(LLFolderViewItem* item) item->setRect(LLRect(0, 0, getRect().getWidth(), 0)); item->setVisible(FALSE); - + addChild(item); getViewModelItem()->addChild(item->getViewModelItem()); - + //TODO RN - make sort bubble up as long as parent Folder doesn't have anything matching sort criteria //// Traverse parent folders and update creation date and resort, if necessary //LLFolderViewFolder* parentp = this; @@ -1508,11 +1508,11 @@ void LLFolderViewFolder::addItem(LLFolderViewItem* item) // this is an internal method used for adding items to folders. void LLFolderViewFolder::addFolder(LLFolderViewFolder* folder) -{ - if (folder->mParentFolder) { + if (folder->mParentFolder) + { folder->mParentFolder->extractItem(folder); - } + } folder->mParentFolder = this; mFolders.push_back(folder); folder->setOrigin(0, 0); @@ -1524,20 +1524,20 @@ void LLFolderViewFolder::addFolder(LLFolderViewFolder* folder) addChild( folder ); getViewModelItem()->addChild(folder->getViewModelItem()); -} + } void LLFolderViewFolder::requestArrange() { //if ( mLastArrangeGeneration != -1) { - mLastArrangeGeneration = -1; - // flag all items up to root - if (mParentFolder) - { - mParentFolder->requestArrange(); + mLastArrangeGeneration = -1; + // flag all items up to root + if (mParentFolder) + { + mParentFolder->requestArrange(); + } } } -} void LLFolderViewFolder::toggleOpen() { diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp index ee87d01239..f8797fd257 100644 --- a/indra/llui/tests/llurlentry_stub.cpp +++ b/indra/llui/tests/llurlentry_stub.cpp @@ -40,9 +40,10 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) return false; } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) { - return; + callback_connection_t connection; + return connection; } bool LLAvatarNameCache::useDisplayNames() diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 32bb84cba5..97637c937f 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -2809,42 +2809,48 @@ const char* cursorIDToName(int id) { switch (id) { - case UI_CURSOR_ARROW: return "UI_CURSOR_ARROW"; - case UI_CURSOR_WAIT: return "UI_CURSOR_WAIT"; - case UI_CURSOR_HAND: return "UI_CURSOR_HAND"; - case UI_CURSOR_IBEAM: return "UI_CURSOR_IBEAM"; - case UI_CURSOR_CROSS: return "UI_CURSOR_CROSS"; - case UI_CURSOR_SIZENWSE: return "UI_CURSOR_SIZENWSE"; - case UI_CURSOR_SIZENESW: return "UI_CURSOR_SIZENESW"; - case UI_CURSOR_SIZEWE: return "UI_CURSOR_SIZEWE"; - case UI_CURSOR_SIZENS: return "UI_CURSOR_SIZENS"; - case UI_CURSOR_NO: return "UI_CURSOR_NO"; - case UI_CURSOR_WORKING: return "UI_CURSOR_WORKING"; - case UI_CURSOR_TOOLGRAB: return "UI_CURSOR_TOOLGRAB"; - case UI_CURSOR_TOOLLAND: return "UI_CURSOR_TOOLLAND"; - case UI_CURSOR_TOOLFOCUS: return "UI_CURSOR_TOOLFOCUS"; - case UI_CURSOR_TOOLCREATE: return "UI_CURSOR_TOOLCREATE"; - case UI_CURSOR_ARROWDRAG: return "UI_CURSOR_ARROWDRAG"; - case UI_CURSOR_ARROWCOPY: return "UI_CURSOR_ARROWCOPY"; - case UI_CURSOR_ARROWDRAGMULTI: return "UI_CURSOR_ARROWDRAGMULTI"; - case UI_CURSOR_ARROWCOPYMULTI: return "UI_CURSOR_ARROWCOPYMULTI"; - case UI_CURSOR_NOLOCKED: return "UI_CURSOR_NOLOCKED"; - case UI_CURSOR_ARROWLOCKED: return "UI_CURSOR_ARROWLOCKED"; - case UI_CURSOR_GRABLOCKED: return "UI_CURSOR_GRABLOCKED"; - case UI_CURSOR_TOOLTRANSLATE: return "UI_CURSOR_TOOLTRANSLATE"; - case UI_CURSOR_TOOLROTATE: return "UI_CURSOR_TOOLROTATE"; - case UI_CURSOR_TOOLSCALE: return "UI_CURSOR_TOOLSCALE"; - case UI_CURSOR_TOOLCAMERA: return "UI_CURSOR_TOOLCAMERA"; - case UI_CURSOR_TOOLPAN: return "UI_CURSOR_TOOLPAN"; - case UI_CURSOR_TOOLZOOMIN: return "UI_CURSOR_TOOLZOOMIN"; - case UI_CURSOR_TOOLPICKOBJECT3: return "UI_CURSOR_TOOLPICKOBJECT3"; - case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY"; - case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE"; - case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN"; - case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE"; - case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT"; - case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY"; - case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN"; + case UI_CURSOR_ARROW: return "UI_CURSOR_ARROW"; + case UI_CURSOR_WAIT: return "UI_CURSOR_WAIT"; + case UI_CURSOR_HAND: return "UI_CURSOR_HAND"; + case UI_CURSOR_IBEAM: return "UI_CURSOR_IBEAM"; + case UI_CURSOR_CROSS: return "UI_CURSOR_CROSS"; + case UI_CURSOR_SIZENWSE: return "UI_CURSOR_SIZENWSE"; + case UI_CURSOR_SIZENESW: return "UI_CURSOR_SIZENESW"; + case UI_CURSOR_SIZEWE: return "UI_CURSOR_SIZEWE"; + case UI_CURSOR_SIZENS: return "UI_CURSOR_SIZENS"; + case UI_CURSOR_NO: return "UI_CURSOR_NO"; + case UI_CURSOR_WORKING: return "UI_CURSOR_WORKING"; + case UI_CURSOR_TOOLGRAB: return "UI_CURSOR_TOOLGRAB"; + case UI_CURSOR_TOOLLAND: return "UI_CURSOR_TOOLLAND"; + case UI_CURSOR_TOOLFOCUS: return "UI_CURSOR_TOOLFOCUS"; + case UI_CURSOR_TOOLCREATE: return "UI_CURSOR_TOOLCREATE"; + case UI_CURSOR_ARROWDRAG: return "UI_CURSOR_ARROWDRAG"; + case UI_CURSOR_ARROWCOPY: return "UI_CURSOR_ARROWCOPY"; + case UI_CURSOR_ARROWDRAGMULTI: return "UI_CURSOR_ARROWDRAGMULTI"; + case UI_CURSOR_ARROWCOPYMULTI: return "UI_CURSOR_ARROWCOPYMULTI"; + case UI_CURSOR_NOLOCKED: return "UI_CURSOR_NOLOCKED"; + case UI_CURSOR_ARROWLOCKED: return "UI_CURSOR_ARROWLOCKED"; + case UI_CURSOR_GRABLOCKED: return "UI_CURSOR_GRABLOCKED"; + case UI_CURSOR_TOOLTRANSLATE: return "UI_CURSOR_TOOLTRANSLATE"; + case UI_CURSOR_TOOLROTATE: return "UI_CURSOR_TOOLROTATE"; + case UI_CURSOR_TOOLSCALE: return "UI_CURSOR_TOOLSCALE"; + case UI_CURSOR_TOOLCAMERA: return "UI_CURSOR_TOOLCAMERA"; + case UI_CURSOR_TOOLPAN: return "UI_CURSOR_TOOLPAN"; + case UI_CURSOR_TOOLZOOMIN: return "UI_CURSOR_TOOLZOOMIN"; + case UI_CURSOR_TOOLPICKOBJECT3: return "UI_CURSOR_TOOLPICKOBJECT3"; + case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY"; + case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE"; + case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN"; + case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE"; + case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT"; + case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY"; + case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN"; + case UI_CURSOR_TOOLPATHFINDING: return "UI_CURSOR_PATHFINDING"; + case UI_CURSOR_TOOLPATHFINDING_PATH_START: return "UI_CURSOR_PATHFINDING_START"; + case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD: return "UI_CURSOR_PATHFINDING_START_ADD"; + case UI_CURSOR_TOOLPATHFINDING_PATH_END: return "UI_CURSOR_PATHFINDING_END"; + case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD: return "UI_CURSOR_PATHFINDING_END_ADD"; + case UI_CURSOR_TOOLNO: return "UI_CURSOR_NO"; } llerrs << "cursorIDToName: unknown cursor id" << id << llendl; @@ -2950,6 +2956,12 @@ void LLWindowMacOSX::updateCursor() case UI_CURSOR_TOOLSIT: case UI_CURSOR_TOOLBUY: case UI_CURSOR_TOOLOPEN: + case UI_CURSOR_TOOLPATHFINDING: + case UI_CURSOR_TOOLPATHFINDING_PATH_START: + case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD: + case UI_CURSOR_TOOLPATHFINDING_PATH_END: + case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD: + case UI_CURSOR_TOOLNO: result = setImageCursor(gCursors[mNextCursor]); break; @@ -2994,6 +3006,12 @@ void LLWindowMacOSX::initCursors() initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15); initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15); initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15); + initPixmapCursor(UI_CURSOR_TOOLPATHFINDING, 16, 16); + initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START, 16, 16); + initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD, 16, 16); + initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END, 16, 16); + initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD, 16, 16); + initPixmapCursor(UI_CURSOR_TOOLNO, 8, 8); initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10); initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10); diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 3d33af9d9b..3bf4a48cb6 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -2117,6 +2117,12 @@ void LLWindowSDL::initCursors() mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15); mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15); mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15); + mSDLCursors[UI_CURSOR_TOOLPATHFINDING] = makeSDLCursorFromBMP("lltoolpathfinding.BMP", 16, 16); + mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START] = makeSDLCursorFromBMP("lltoolpathfindingpathstart.BMP", 16, 16); + mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathstartadd.BMP", 16, 16); + mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END] = makeSDLCursorFromBMP("lltoolpathfindingpathend.BMP", 16, 16); + mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathendadd.BMP", 16, 16); + mSDLCursors[UI_CURSOR_TOOLNO] = makeSDLCursorFromBMP("llno.BMP",8,8); if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) { llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index c49c625dbd..b94c33587b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -45,7 +45,10 @@ include(VisualLeakDetector) include(GLOD) include(CMakeCopyIfDifferent) -add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +if (NOT HAVOK_TPV) + # When using HAVOK_TPV, the library is precompiled, so no need for this + add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +endif (NOT HAVOK_TPV) include_directories( ${DBUSGLIB_INCLUDE_DIRS} diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 47e944bc26..61bc58b1df 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5045,7 +5045,7 @@ <key>LoginLocation</key> <map> <key>Comment</key> - <string>Login location ('last', 'home')</string> + <string>Default Login location ('last', 'home') preference</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -6145,7 +6145,7 @@ <key>NextLoginLocation</key> <map> <key>Comment</key> - <string>Location to log into by default.</string> + <string>Location to log into for this session - set from command line or the login panel, cleared following a successfull login.</string> <key>Persist</key> <integer>1</integer> <key>Type</key> diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif Binary files differnew file mode 100644 index 0000000000..ba6f30fa0e --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif Binary files differnew file mode 100644 index 0000000000..830d5692fd --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif Binary files differnew file mode 100644 index 0000000000..e05284214a --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif Binary files differnew file mode 100644 index 0000000000..c4822adf64 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif Binary files differnew file mode 100644 index 0000000000..5166af6e05 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 1c81459912..08a1a237f5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2669,14 +2669,6 @@ bool LLAppViewer::initConfiguration() } } - // If automatic login from command line with --login switch - // init StartSLURL location. In interactive login, LLPanelLogin - // will take care of it. - if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl")) - { - LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation"))); - } - if (!gSavedSettings.getBOOL("AllowMultipleViewers")) { // @@ -2724,12 +2716,27 @@ bool LLAppViewer::initConfiguration() } } - // need to do this here - need to have initialized global settings first + // NextLoginLocation is set from the command line option std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" ); if ( !nextLoginLocation.empty() ) { + LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL; LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation)); - }; + } + else if ( ( clp.hasOption("login") || clp.hasOption("autologin")) + && !clp.hasOption("url") + && !clp.hasOption("slurl")) + { + // If automatic login from command line with --login switch + // init StartSLURL location. + std::string start_slurl_setting = gSavedSettings.getString("LoginLocation"); + LL_DEBUGS("AppInit") << "start slurl setting '" << start_slurl_setting << "'" << LL_ENDL; + LLStartUp::setStartSLURL(LLSLURL(start_slurl_setting)); + } + else + { + // the login location will be set by the login panel (see LLPanelLogin) + } gLastRunVersion = gSavedSettings.getString("LastRunVersion"); diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index 832dc3c3e4..f54e6d2d48 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -29,7 +29,10 @@ #include "llconversationmodel.h" -// Conversation items +// +// Conversation items : common behaviors +// + LLConversationItem::LLConversationItem(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) : LLFolderViewModelItemCommon(root_view_model), mName(display_name), @@ -73,4 +76,32 @@ bool LLConversationSort::operator()(const LLConversationItem* const& a, const LL return (compare < 0); } +// +// LLConversationItemSession +// + +LLConversationItemSession::LLConversationItemSession(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) : + LLConversationItem(display_name,uuid,root_view_model) +{ +} + +LLConversationItemSession::LLConversationItemSession(LLFolderViewModelInterface& root_view_model) : + LLConversationItem(root_view_model) +{ +} + +// +// LLConversationItemParticipant +// + +LLConversationItemParticipant::LLConversationItemParticipant(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) : + LLConversationItem(display_name,uuid,root_view_model) +{ +} + +LLConversationItemParticipant::LLConversationItemParticipant(LLFolderViewModelInterface& root_view_model) : + LLConversationItem(root_view_model) +{ +} + // EOF diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index cb03128cac..fc2c600364 100644 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -104,6 +104,22 @@ private: const LLUUID mUUID; }; +class LLConversationItemSession : public LLConversationItem +{ +public: + LLConversationItemSession(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model); + LLConversationItemSession(LLFolderViewModelInterface& root_view_model); + virtual ~LLConversationItemSession() {} +}; + +class LLConversationItemParticipant : public LLConversationItem +{ +public: + LLConversationItemParticipant(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model); + LLConversationItemParticipant(LLFolderViewModelInterface& root_view_model); + virtual ~LLConversationItemParticipant() {} +}; + // We don't want to ever filter conversations but we need to declare that class to create a conversation view model. // We just stubb everything for the moment. class LLConversationFilter : public LLFolderViewFilter diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index 6cc911ecef..fefb7e9cac 100644 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -32,6 +32,10 @@ #include "llimconversation.h" #include "llimfloatercontainer.h" +// +// Implementation of conversations list session widgets +// + LLConversationViewSession::Params::Params() : container() {} @@ -75,4 +79,13 @@ void LLConversationViewSession::setVisibleIfDetached(BOOL visible) } } +// +// Implementation of conversations list participant (avatar) widgets +// + +LLConversationViewParticipant::LLConversationViewParticipant( const LLFolderViewItem::Params& p ): + LLFolderViewItem(p) +{ +} + // EOF diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index 6a51e719c8..5695925f43 100644 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -31,7 +31,7 @@ class LLIMFloaterContainer; -// Implementation of conversations list widgets +// Implementation of conversations list session widgets class LLConversationViewSession : public LLFolderViewFolder { @@ -55,4 +55,16 @@ public: void setVisibleIfDetached(BOOL visible); }; +// Implementation of conversations list participant (avatar) widgets + +class LLConversationViewParticipant : public LLFolderViewItem +{ +protected: + friend class LLUICtrlFactory; + LLConversationViewParticipant( const LLFolderViewItem::Params& p ); + +public: + virtual ~LLConversationViewParticipant( void ) { } +}; + #endif // LL_LLCONVERSATIONVIEW_H diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index eca964442b..606d77f645 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -342,10 +342,10 @@ void LLVolumeImplFlexible::doIdleUpdate() if (drawablep) { //LLFastTimer ftm(FTM_FLEXIBLE_UPDATE); - + //ensure drawable is active drawablep->makeActive(); - + if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE)) { bool visible = drawablep->isVisible(); @@ -364,35 +364,35 @@ void LLVolumeImplFlexible::doIdleUpdate() if (visible) { if (!drawablep->isState(LLDrawable::IN_REBUILD_Q1) && - mVO->getPixelArea() > 256.f) - { - U32 id; - - if (mVO->isRootEdit()) - { - id = mID; - } - else - { - LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); - id = parent->getVolumeInterfaceID(); - } - - if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) - { + mVO->getPixelArea() > 256.f) + { + U32 id; + + if (mVO->isRootEdit()) + { + id = mID; + } + else + { + LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); + id = parent->getVolumeInterfaceID(); + } + + if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) + { sUpdateDelay[mInstanceIndex] = (S32) update_period-1; - updateRenderRes(); + updateRenderRes(); - gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE); - } - } + gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE); } + } + } else { sUpdateDelay[mInstanceIndex] = (S32) update_period; - } - } + } +} } } diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 99d262344c..69c9d94dfa 100644 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -134,26 +134,20 @@ void LLFloaterPathfindingCharacters::requestGetObjects() LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3)); } -LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingCharacters::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr) { llassert(pObjectListPtr != NULL); llassert(!pObjectListPtr->isEmpty()); - LLSD scrollListData = LLSD::emptyArray(); - for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get()); - LLSD element = buildCharacterScrollListData(characterPtr); - scrollListData.append(element); + const LLPathfindingObjectPtr objectPtr = objectIter->second; + const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectPtr.get()); + llassert(characterPtr != NULL); - if (characterPtr->hasOwner() && !characterPtr->hasOwnerName()) - { - rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID()); - } + LLSD scrollListItemData = buildCharacterScrollListItemData(characterPtr); + addObjectToScrollList(objectPtr, scrollListItemData); } - - return scrollListData; } void LLFloaterPathfindingCharacters::updateControlsOnScrollListChange() @@ -168,6 +162,22 @@ S32 LLFloaterPathfindingCharacters::getNameColumnIndex() const return 0; } +S32 LLFloaterPathfindingCharacters::getOwnerNameColumnIndex() const +{ + return 2; +} + +std::string LLFloaterPathfindingCharacters::getOwnerName(const LLPathfindingObject *pObject) const +{ + return (pObject->hasOwner() + ? (pObject->hasOwnerName() + ? (pObject->isGroupOwned() + ? (pObject->getOwnerName() + " " + getString("character_owner_group")) + : pObject->getOwnerName()) + : getString("character_owner_loading")) + : getString("character_owner_unknown")); +} + const LLColor4 &LLFloaterPathfindingCharacters::getBeaconColor() const { return mBeaconColor; @@ -201,9 +211,9 @@ void LLFloaterPathfindingCharacters::onShowPhysicsCapsuleClicked() } } -LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const +LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const { - LLSD columns; + LLSD columns = LLSD::emptyArray(); columns[0]["column"] = "name"; columns[0]["value"] = pCharacterPtr->getName(); @@ -212,13 +222,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi columns[1]["value"] = pCharacterPtr->getDescription(); columns[2]["column"] = "owner"; - columns[2]["value"] = (pCharacterPtr->hasOwner() - ? (pCharacterPtr->hasOwnerName() - ? (pCharacterPtr->isGroupOwned() - ? (pCharacterPtr->getOwnerName() + " " + getString("character_owner_group")) - : pCharacterPtr->getOwnerName()) - : getString("character_owner_loading")) - : getString("character_owner_unknown")); + columns[2]["value"] = getOwnerName(pCharacterPtr); S32 cpuTime = llround(pCharacterPtr->getCPUTime()); std::string cpuTimeString = llformat("%d", cpuTime); @@ -231,11 +235,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi columns[4]["column"] = "altitude"; columns[4]["value"] = llformat("%1.0f m", pCharacterPtr->getLocation()[2]); - LLSD element; - element["id"] = pCharacterPtr->getUUID().asString(); - element["column"] = columns; - - return element; + return columns; } void LLFloaterPathfindingCharacters::updateStateOnDisplayControls() diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h index ef389ad428..4021f4f119 100644 --- a/indra/newview/llfloaterpathfindingcharacters.h +++ b/indra/newview/llfloaterpathfindingcharacters.h @@ -62,11 +62,13 @@ protected: virtual void requestGetObjects(); - virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); + virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); virtual void updateControlsOnScrollListChange(); virtual S32 getNameColumnIndex() const; + virtual S32 getOwnerNameColumnIndex() const; + virtual std::string getOwnerName(const LLPathfindingObject *pObject) const; virtual const LLColor4 &getBeaconColor() const; virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -74,7 +76,7 @@ protected: private: void onShowPhysicsCapsuleClicked(); - LLSD buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const; + LLSD buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const; void updateStateOnDisplayControls(); void showSelectedCharacterCapsules(); diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 877bd0822d..0fe0e151fb 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -215,7 +215,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects() LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3)); } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr) { llassert(pObjectListPtr != NULL); llassert(!pObjectListPtr->isEmpty()); @@ -227,7 +227,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath bool isFilteringDescription = !descriptionFilter.empty(); bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); - LLSD scrollListData = LLSD::emptyArray(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) @@ -236,22 +235,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath LLStringUtil::toUpper(descriptionFilter); for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); + const LLPathfindingObjectPtr objectPtr = objectIter->second; + const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); + llassert(linksetPtr != NULL); + std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); std::string linksetDescription = linksetPtr->getDescription(); LLStringUtil::toUpper(linksetName); LLStringUtil::toUpper(linksetDescription); + if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) { - LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); - scrollListData.append(element); - - if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) - { - rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); - } + LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); + addObjectToScrollList(objectPtr, scrollListItemData); } } } @@ -259,18 +257,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath { for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); - LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); - scrollListData.append(element); + const LLPathfindingObjectPtr objectPtr = objectIter->second; + const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); + llassert(linksetPtr != NULL); - if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) - { - rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); - } + LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); + addObjectToScrollList(objectPtr, scrollListItemData); } } - - return scrollListData; } void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() @@ -286,6 +280,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const return 0; } +S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const +{ + return 2; +} + +std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const +{ + return (pObject->hasOwner() + ? (pObject->hasOwnerName() + ? (pObject->isGroupOwned() + ? (pObject->getOwnerName() + " " + getString("linkset_owner_group")) + : pObject->getOwnerName()) + : getString("linkset_owner_loading")) + : getString("linkset_owner_unknown")); +} + const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const { return mBeaconColor; @@ -373,10 +383,10 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() } } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const { llassert(pLinksetPtr != NULL); - LLSD columns; + LLSD columns = LLSD::emptyArray(); if (pLinksetPtr->isTerrain()) { @@ -389,11 +399,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin columns[2]["column"] = "owner"; columns[2]["value"] = getString("linkset_terrain_owner"); - columns[3]["column"] = "land_impact"; - columns[3]["value"] = getString("linkset_terrain_land_impact"); + columns[3]["column"] = "scripted"; + columns[3]["value"] = getString("linkset_terrain_scripted"); - columns[4]["column"] = "dist_from_you"; - columns[4]["value"] = getString("linkset_terrain_dist_from_you"); + columns[4]["column"] = "land_impact"; + columns[4]["value"] = getString("linkset_terrain_land_impact"); + + columns[5]["column"] = "dist_from_you"; + columns[5]["value"] = getString("linkset_terrain_dist_from_you"); } else { @@ -404,22 +417,23 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin columns[1]["value"] = pLinksetPtr->getDescription(); columns[2]["column"] = "owner"; - columns[2]["value"] = (pLinksetPtr->hasOwner() - ? (pLinksetPtr->hasOwnerName() - ? (pLinksetPtr->isGroupOwned() - ? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) - : pLinksetPtr->getOwnerName()) - : getString("linkset_owner_loading")) - : getString("linkset_owner_unknown")); - - columns[3]["column"] = "land_impact"; - columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - - columns[4]["column"] = "dist_from_you"; - columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[2]["value"] = getOwnerName(pLinksetPtr); + + columns[3]["column"] = "scripted"; + columns[3]["value"] = (pLinksetPtr->hasIsScripted() + ? (pLinksetPtr->isScripted() + ? getString("linkset_is_scripted") + : getString("linkset_is_not_scripted")) + : getString("linkset_is_unknown_scripted")); + + columns[4]["column"] = "land_impact"; + columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + + columns[5]["column"] = "dist_from_you"; + columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); } - columns[5]["column"] = "linkset_use"; + columns[6]["column"] = "linkset_use"; std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); if (pLinksetPtr->isTerrain()) { @@ -437,25 +451,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin { linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); } - columns[5]["value"] = linksetUse; - - columns[6]["column"] = "a_percent"; - columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); + columns[6]["value"] = linksetUse; - columns[7]["column"] = "b_percent"; - columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); + columns[7]["column"] = "a_percent"; + columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); - columns[8]["column"] = "c_percent"; - columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); + columns[8]["column"] = "b_percent"; + columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); - columns[9]["column"] = "d_percent"; - columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); + columns[9]["column"] = "c_percent"; + columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); - LLSD element; - element["id"] = pLinksetPtr->getUUID().asString(); - element["column"] = columns; + columns[10]["column"] = "d_percent"; + columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); - return element; + return columns; } LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const @@ -490,6 +500,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin return isShowWarning; } +bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ + bool isShowWarning = false; + + if (pLinksetUse != LLPathfindingLinkset::kUnknown) + { + LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); + if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) + { + const LLPathfindingLinksetList *linksetList = dynamic_cast<const LLPathfindingLinksetList *>(selectedObjects.get()); + isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse); + } + } + + return isShowWarning; +} + bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const { bool isShowWarning = false; @@ -559,29 +586,41 @@ void LLFloaterPathfindingLinksets::applyEdit() { LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); + bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse); bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse); bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); - if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) + if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) { LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse); LLSD substitutions; substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse); substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); - std::string notificationName; - if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) + // Build one of the following notifications names + // - PathfindingLinksets_WarnOnPhantom + // - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted + // - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume + // - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume + // - PathfindingLinksets_MismatchOnRestricted + // - PathfindingLinksets_MismatchOnVolume + // - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume + + std::string notificationName = "PathfindingLinksets"; + + if (showPhantomToggleWarning) { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; + notificationName += "_WarnOnPhantom"; } - else if (showUnmodifiablePhantomWarning) + if (showUnmodifiablePhantomWarning) { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; + notificationName += "_MismatchOnRestricted"; } - else + if (showCannotBeVolumeWarning) { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; + notificationName += "_MismatchOnVolume"; } + LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); } else diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 342a64fc77..6538308122 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -58,11 +58,13 @@ protected: virtual void requestGetObjects(); - virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); + virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); virtual void updateControlsOnScrollListChange(); virtual S32 getNameColumnIndex() const; + virtual S32 getOwnerNameColumnIndex() const; + virtual std::string getOwnerName(const LLPathfindingObject *pObject) const; virtual const LLColor4 &getBeaconColor() const; virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -78,10 +80,11 @@ private: void clearFilters(); void updateEditFieldValues(); - LLSD buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const; + LLSD buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const; LLSD buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const; bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; + bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; void updateStateOnEditFields(); diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index e246265be9..20c1215bcb 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -29,6 +29,8 @@ #include "llfloaterpathfindingobjects.h" +#include <string> +#include <map> #include <vector> #include <boost/bind.hpp> @@ -96,7 +98,6 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey) void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting) { - if (mGodLevelChangeSlot.connected()) { mGodLevelChangeSlot.disconnect(); @@ -119,6 +120,11 @@ void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting) { mObjectsSelection.clear(); } + + if (pIsAppQuitting) + { + clearAllObjects(); + } } void LLFloaterPathfindingObjects::draw() @@ -168,13 +174,13 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed) mReturnButton(NULL), mDeleteButton(NULL), mTeleportButton(NULL), - mLoadingAvatarNames(), mDefaultBeaconColor(), mDefaultBeaconTextColor(), mErrorTextColor(), mWarningTextColor(), mMessagingState(kMessagingUnknown), mMessagingRequestId(0U), + mMissingNameObjectsScrollListItems(), mObjectList(), mObjectsSelection(), mHasObjectsToBeSelected(false), @@ -186,6 +192,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed) LLFloaterPathfindingObjects::~LLFloaterPathfindingObjects() { + clearAllObjects(); } BOOL LLFloaterPathfindingObjects::postBuild() @@ -343,54 +350,21 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList() S32 origScrollPosition = mObjectsScrollList->getScrollPos(); mObjectsScrollList->deleteAllItems(); + mMissingNameObjectsScrollListItems.clear(); if ((mObjectList != NULL) && !mObjectList->isEmpty()) { - LLSD scrollListData = convertObjectsIntoScrollListData(mObjectList); - llassert(scrollListData.isArray()); + buildObjectsScrollList(mObjectList); - LLScrollListCell::Params cellParams; - cellParams.font = LLFontGL::getFontSansSerif(); - - for (LLSD::array_const_iterator rowElementIter = scrollListData.beginArray(); rowElementIter != scrollListData.endArray(); ++rowElementIter) + mObjectsScrollList->selectMultiple(mObjectsToBeSelected); + if (mHasObjectsToBeSelected) { - const LLSD &rowElement = *rowElementIter; - - LLScrollListItem::Params rowParams; - llassert(rowElement.has("id")); - llassert(rowElement.get("id").isString()); - rowParams.value = rowElement.get("id"); - - llassert(rowElement.has("column")); - llassert(rowElement.get("column").isArray()); - const LLSD &columnElement = rowElement.get("column"); - for (LLSD::array_const_iterator cellIter = columnElement.beginArray(); cellIter != columnElement.endArray(); ++cellIter) - { - const LLSD &cellElement = *cellIter; - - llassert(cellElement.has("column")); - llassert(cellElement.get("column").isString()); - cellParams.column = cellElement.get("column").asString(); - - llassert(cellElement.has("value")); - llassert(cellElement.get("value").isString()); - cellParams.value = cellElement.get("value").asString(); - - rowParams.columns.add(cellParams); - } - - mObjectsScrollList->addRow(rowParams); + mObjectsScrollList->scrollToShowSelected(); + } + else + { + mObjectsScrollList->setScrollPos(origScrollPosition); } - } - - mObjectsScrollList->selectMultiple(mObjectsToBeSelected); - if (mHasObjectsToBeSelected) - { - mObjectsScrollList->scrollToShowSelected(); - } - else - { - mObjectsScrollList->setScrollPos(origScrollPosition); } mObjectsToBeSelected.clear(); @@ -399,20 +373,42 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList() updateControlsOnScrollListChange(); } -LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr) { llassert(0); - LLSD nullObjs = LLSD::emptyArray(); - return nullObjs; } -void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId) +void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData) { - std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId); - if (iter == mLoadingAvatarNames.end()) + LLScrollListCell::Params cellParams; + cellParams.font = LLFontGL::getFontSansSerif(); + + LLScrollListItem::Params rowParams; + rowParams.value = pObjectPtr->getUUID().asString(); + + llassert(pScrollListItemData.isArray()); + for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray(); + cellIter != pScrollListItemData.endArray(); ++cellIter) + { + const LLSD &cellElement = *cellIter; + + llassert(cellElement.has("column")); + llassert(cellElement.get("column").isString()); + cellParams.column = cellElement.get("column").asString(); + + llassert(cellElement.has("value")); + llassert(cellElement.get("value").isString()); + cellParams.value = cellElement.get("value").asString(); + + rowParams.columns.add(cellParams); + } + + LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams); + + if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName()) { - mLoadingAvatarNames.insert(pAvatarId); - LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2)); + mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); + pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1)); } } @@ -434,6 +430,18 @@ S32 LLFloaterPathfindingObjects::getNameColumnIndex() const return 0; } +S32 LLFloaterPathfindingObjects::getOwnerNameColumnIndex() const +{ + return 2; +} + +std::string LLFloaterPathfindingObjects::getOwnerName(const LLPathfindingObject *pObject) const +{ + llassert(0); + std::string returnVal; + return returnVal; +} + const LLColor4 &LLFloaterPathfindingObjects::getBeaconColor() const { return mDefaultBeaconColor; @@ -496,6 +504,7 @@ void LLFloaterPathfindingObjects::clearAllObjects() { selectNoneObjects(); mObjectsScrollList->deleteAllItems(); + mMissingNameObjectsScrollListItems.clear(); mObjectList.reset(); } @@ -683,13 +692,22 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel) requestGetObjects(); } -void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName) +void LLFloaterPathfindingObjects::handleObjectNameResponse(const LLPathfindingObject *pObject) { - llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end()); - mLoadingAvatarNames.erase(pAvatarId); - if (mLoadingAvatarNames.empty()) + llassert(pObject != NULL); + const std::string uuid = pObject->getUUID().asString(); + scroll_list_item_map::iterator scrollListItemIter = mMissingNameObjectsScrollListItems.find(uuid); + if (scrollListItemIter != mMissingNameObjectsScrollListItems.end()) { - rebuildObjectsScrollList(); + LLScrollListItem *scrollListItem = scrollListItemIter->second; + llassert(scrollListItem != NULL); + + LLScrollListCell *scrollListCell = scrollListItem->getColumn(getOwnerNameColumnIndex()); + LLSD ownerName = getOwnerName(pObject); + + scrollListCell->setValue(ownerName); + + mMissingNameObjectsScrollListItems.erase(scrollListItemIter); } } diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h index e8d446b598..4024e15fd6 100644 --- a/indra/newview/llfloaterpathfindingobjects.h +++ b/indra/newview/llfloaterpathfindingobjects.h @@ -27,7 +27,8 @@ #ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H #define LL_LLFLOATERPATHFINDINGOBJECTS_H -#include <set> +#include <string> +#include <map> #include <boost/signals2.hpp> @@ -80,14 +81,15 @@ protected: void handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList); void rebuildObjectsScrollList(); - virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); - - void rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId); + virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); + void addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData); virtual void updateControlsOnScrollListChange(); virtual void updateControlsOnInWorldSelectionChange(); virtual S32 getNameColumnIndex() const; + virtual S32 getOwnerNameColumnIndex() const; + virtual std::string getOwnerName(const LLPathfindingObject *pObject) const; virtual const LLColor4 &getBeaconColor() const; virtual const LLColor4 &getBeaconTextColor() const; virtual S32 getBeaconWidth() const; @@ -126,7 +128,7 @@ private: void onRegionBoundaryCrossed(); void onGodLevelChange(U8 pGodLevel); - void handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName); + void handleObjectNameResponse(const LLPathfindingObject *pObject); void updateMessagingStatus(); void updateStateOnListControls(); @@ -151,8 +153,6 @@ private: LLButton *mDeleteButton; LLButton *mTeleportButton; - std::set<LLUUID> mLoadingAvatarNames; - LLColor4 mDefaultBeaconColor; LLColor4 mDefaultBeaconTextColor; LLColor4 mErrorTextColor; @@ -161,6 +161,9 @@ private: EMessagingState mMessagingState; LLPathfindingManager::request_id_t mMessagingRequestId; + typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map; + scroll_list_item_map mMissingNameObjectsScrollListItems; + LLPathfindingObjectListPtr mObjectList; LLObjectSelectionHandle mObjectsSelection; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 4d38f5834e..7cf358c8e5 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -133,7 +133,6 @@ public: if(tools_floater) { tools_floater->updateLandImpacts(); - tools_floater->dirty(); } } }; diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 35b9f404c3..4d0bd623f8 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -328,11 +328,11 @@ void LLIMFloaterContainer::setVisible(BOOL visible) // We need to show/hide all the associated conversations that have been torn off // (and therefore, are not longer managed by the multifloater), // so that they show/hide with the conversations manager. - conversations_widgets_map::iterator item_it = mConversationsWidgets.begin(); - for (;item_it != mConversationsWidgets.end(); ++item_it) + conversations_widgets_map::iterator widget_it = mConversationsWidgets.begin(); + for (;widget_it != mConversationsWidgets.end(); ++widget_it) { - LLConversationViewSession* item = dynamic_cast<LLConversationViewSession*>(item_it->second); - item->setVisibleIfDetached(visible); + LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(widget_it->second); + widget->setVisibleIfDetached(visible); } // Now, do the normal multifloater show/hide @@ -471,7 +471,7 @@ void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid) removeConversationListItem(uuid,false); // Create a conversation item - LLConversationItem* item = new LLConversationItem(display_name, uuid, getRootViewModel()); + LLConversationItem* item = new LLConversationItemSession(display_name, uuid, getRootViewModel()); mConversationsItems[uuid] = item; // Create a widget from it @@ -513,11 +513,11 @@ void LLIMFloaterContainer::removeConversationListItem(const LLUUID& uuid, bool c if (change_focus) { setFocus(TRUE); - conversations_items_map::iterator item_it = mConversationsItems.begin(); - if (item_it != mConversationsItems.end()) + conversations_widgets_map::iterator widget_it = mConversationsWidgets.begin(); + if (widget_it != mConversationsWidgets.end()) { - LLConversationItem* item = item_it->second; - item->selectItem(); + LLFolderViewItem* widget = widget_it->second; + widget->selectItem(); } } } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 91798e0f10..745375fe3d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1153,7 +1153,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, default: llinfos << "Unhandled asset type (llassetstorage.h): " << (S32)asset_type << " (" << LLAssetType::lookup(asset_type) << ")" << llendl; - break; + break; } if (new_listener) @@ -1548,7 +1548,7 @@ void LLItemBridge::buildDisplayName() const else { mDisplayName.assign(LLStringUtil::null); - } +} mSearchableName.assign(mDisplayName); mSearchableName.append(getLabelSuffix()); @@ -1556,10 +1556,10 @@ void LLItemBridge::buildDisplayName() const //Name set, so trigger a sort if(mParent) - { +{ mParent->requestSort(); - } -} + } + } LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const { @@ -1692,7 +1692,7 @@ BOOL LLItemBridge::removeItem() { return FALSE; } - + // move it to the trash LLPreview::hide(mUUID, TRUE); LLInventoryModel* model = getInventoryModel(); @@ -3476,9 +3476,9 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items // it's all on its way - add an observer, and the inventory will call done for us when everything is here. inc_busy_count(); gInventory.addObserver(fetch); - } } } +} void LLFolderBridge::buildContextMenuFolderOptions(U32 flags, menuentry_vec_t& items, menuentry_vec_t& disabled_items) { @@ -6521,16 +6521,16 @@ LLInvFVBridge* LLRecentInventoryBridgeBuilder::createBridge( new_listener = new LLRecentItemsFolderBridge(inv_type, inventory, root, uuid); } else - { + { new_listener = LLInventoryFolderViewModelBuilder::createBridge(asset_type, - actual_asset_type, - inv_type, - inventory, + actual_asset_type, + inv_type, + inventory, view_model, - root, - uuid, - flags); - } + root, + uuid, + flags); + } return new_listener; } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index a8049b1b03..44ff62e290 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -145,12 +145,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, // change z sort of clickable text to be behind buttons sendChildToBack(getChildView("forgot_password_text")); - - if(LLStartUp::getStartSLURL().getType() != LLSLURL::LOCATION) - { - LLSLURL slurl(gSavedSettings.getString("LoginLocation")); - LLStartUp::setStartSLURL(slurl); - } LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo"); updateLocationSelectorsVisibility(); // separate so that it can be called from preferences @@ -182,6 +176,29 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, ADD_TOP); server_choice_combo->selectFirstItem(); + LLSLURL start_slurl(LLStartUp::getStartSLURL()); + if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ? + { + // no, so get the preference setting + std::string defaultStartLocation = gSavedSettings.getString("LoginLocation"); + LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL; + LLSLURL defaultStart(defaultStartLocation); + if ( defaultStart.isSpatial() ) + { + LLStartUp::setStartSLURL(defaultStart); + } + else + { + LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL; + LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME); + LLStartUp::setStartSLURL(homeStart); + } + } + else + { + LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed + } + childSetAction("connect_btn", onClickConnect, this); getChild<LLPanel>("login")->setDefaultBtn("connect_btn"); @@ -645,8 +662,11 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl) * specify a particular grid; in those cases we want to change the grid * and the grid selector to match the new value. */ - if ( LLSLURL::LOCATION == new_start_slurl.getType() ) + enum LLSLURL::SLURL_TYPE new_slurl_type = new_start_slurl.getType(); + switch ( new_slurl_type ) { + case LLSLURL::LOCATION: + { std::string slurl_grid = LLGridManager::getInstance()->getGrid(new_start_slurl.getGrid()); if ( ! slurl_grid.empty() ) // is that a valid grid? { @@ -668,8 +688,24 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl) { // the grid specified by the slurl is not known LLNotificationsUtil::add("InvalidLocationSLURL"); + LL_WARNS("AppInit")<<"invalid LoginLocation:"<<new_start_slurl.asString()<<LL_ENDL; location_combo->setTextEntry(LLStringUtil::null); } + } + break; + + case LLSLURL::HOME_LOCATION: + location_combo->setCurrentByIndex(1); // home location + break; + + case LLSLURL::LAST_LOCATION: + location_combo->setCurrentByIndex(0); // last location + break; + + default: + LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL; + location_combo->setCurrentByIndex(1); // home location + break; } } diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp index fe4daabd89..50b76378f5 100644 --- a/indra/newview/llpathfindinglinkset.cpp +++ b/indra/newview/llpathfindinglinkset.cpp @@ -39,6 +39,7 @@ #define LINKSET_MODIFIABLE_FIELD "modifiable" #define LINKSET_CATEGORY_FIELD "navmesh_category" #define LINKSET_CAN_BE_VOLUME "can_be_volume" +#define LINKSET_IS_SCRIPTED_FIELD "is_scripted" #define LINKSET_PHANTOM_FIELD "phantom" #define LINKSET_WALKABILITY_A_FIELD "A" #define LINKSET_WALKABILITY_B_FIELD "B" @@ -62,6 +63,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLSD& pTerrainData) mLandImpact(0U), mIsModifiable(FALSE), mCanBeVolume(FALSE), + mIsScripted(FALSE), + mHasIsScripted(TRUE), mLinksetUse(kUnknown), mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE), mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -77,6 +80,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD& mLandImpact(0U), mIsModifiable(TRUE), mCanBeVolume(TRUE), + mIsScripted(FALSE), + mHasIsScripted(FALSE), mLinksetUse(kUnknown), mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE), mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -93,6 +98,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther) mLandImpact(pOther.mLandImpact), mIsModifiable(pOther.mIsModifiable), mCanBeVolume(pOther.mCanBeVolume), + mIsScripted(pOther.mIsScripted), + mHasIsScripted(pOther.mHasIsScripted), mLinksetUse(pOther.mLinksetUse), mWalkabilityCoefficientA(pOther.mWalkabilityCoefficientA), mWalkabilityCoefficientB(pOther.mWalkabilityCoefficientB), @@ -113,6 +120,8 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse mLandImpact = pOther.mLandImpact; mIsModifiable = pOther.mIsModifiable; mCanBeVolume = pOther.mCanBeVolume; + mIsScripted = pOther.mIsScripted; + mHasIsScripted = pOther.mHasIsScripted; mLinksetUse = pOther.mLinksetUse; mWalkabilityCoefficientA = pOther.mWalkabilityCoefficientA; mWalkabilityCoefficientB = pOther.mWalkabilityCoefficientB; @@ -140,6 +149,11 @@ bool LLPathfindingLinkset::isShowUnmodifiablePhantomWarning(ELinksetUse pLinkset return (!isModifiable() && (isPhantom() != isPhantom(pLinksetUse))); } +bool LLPathfindingLinkset::isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const +{ + return (isModifiable() && (isPhantom() != isPhantom(pLinksetUse))); +} + bool LLPathfindingLinkset::isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const { return (!canBeVolume() && ((pLinksetUse == kMaterialVolume) || (pLinksetUse == kExclusionVolume))); @@ -193,6 +207,13 @@ void LLPathfindingLinkset::parseLinksetData(const LLSD &pLinksetData) llassert(pLinksetData.has(LINKSET_MODIFIABLE_FIELD)); llassert(pLinksetData.get(LINKSET_MODIFIABLE_FIELD).isBoolean()); mIsModifiable = pLinksetData.get(LINKSET_MODIFIABLE_FIELD).asBoolean(); + + mHasIsScripted = pLinksetData.has(LINKSET_IS_SCRIPTED_FIELD); + if (mHasIsScripted) + { + llassert(pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).isBoolean()); + mIsScripted = pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).asBoolean(); + } } void LLPathfindingLinkset::parsePathfindingData(const LLSD &pLinksetData) diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h index 73b4d6bad4..308a3a1e0f 100644 --- a/indra/newview/llpathfindinglinkset.h +++ b/indra/newview/llpathfindinglinkset.h @@ -63,12 +63,16 @@ public: inline ELinksetUse getLinksetUse() const {return mLinksetUse;}; + inline BOOL isScripted() const {return mIsScripted;}; + inline BOOL hasIsScripted() const {return mHasIsScripted;}; + inline S32 getWalkabilityCoefficientA() const {return mWalkabilityCoefficientA;}; inline S32 getWalkabilityCoefficientB() const {return mWalkabilityCoefficientB;}; inline S32 getWalkabilityCoefficientC() const {return mWalkabilityCoefficientC;}; inline S32 getWalkabilityCoefficientD() const {return mWalkabilityCoefficientD;}; bool isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const; + bool isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const; bool isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const; LLSD encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; @@ -98,6 +102,8 @@ private: U32 mLandImpact; BOOL mIsModifiable; BOOL mCanBeVolume; + BOOL mIsScripted; + BOOL mHasIsScripted; ELinksetUse mLinksetUse; S32 mWalkabilityCoefficientA; S32 mWalkabilityCoefficientB; diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp index 746fa342a1..b886e46765 100644 --- a/indra/newview/llpathfindinglinksetlist.cpp +++ b/indra/newview/llpathfindinglinksetlist.cpp @@ -113,6 +113,20 @@ bool LLPathfindingLinksetList::isShowUnmodifiablePhantomWarning(LLPathfindingLin return isShowWarning; } +bool LLPathfindingLinksetList::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ + bool isShowWarning = false; + + for (const_iterator objectIter = begin(); !isShowWarning && (objectIter != end()); ++objectIter) + { + const LLPathfindingObjectPtr objectPtr = objectIter->second; + const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); + isShowWarning = linkset->isShowPhantomToggleWarning(pLinksetUse); + } + + return isShowWarning; +} + bool LLPathfindingLinksetList::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const { bool isShowWarning = false; diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h index 77c6358640..1d38e4c11a 100644 --- a/indra/newview/llpathfindinglinksetlist.h +++ b/indra/newview/llpathfindinglinksetlist.h @@ -43,6 +43,7 @@ public: LLSD encodeTerrainFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; + bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; void determinePossibleStates(BOOL &pCanBeWalkable, BOOL &pCanBeStaticObstacle, BOOL &pCanBeDynamicObstacle, diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp index 916eceb4c8..858d3203c0 100644 --- a/indra/newview/llpathfindingobject.cpp +++ b/indra/newview/llpathfindingobject.cpp @@ -55,8 +55,10 @@ LLPathfindingObject::LLPathfindingObject() mOwnerUUID(), mHasOwnerName(false), mOwnerName(), + mAvatarNameCacheConnection(), mIsGroupOwned(false), - mLocation() + mLocation(), + mOwnerNameSignal() { } @@ -67,8 +69,10 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p mOwnerUUID(), mHasOwnerName(false), mOwnerName(), + mAvatarNameCacheConnection(), mIsGroupOwned(false), - mLocation() + mLocation(), + mOwnerNameSignal() { parseObjectData(pObjectData); } @@ -80,14 +84,17 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther) mOwnerUUID(pOther.mOwnerUUID), mHasOwnerName(false), mOwnerName(), + mAvatarNameCacheConnection(), mIsGroupOwned(pOther.mIsGroupOwned), - mLocation(pOther.mLocation) + mLocation(pOther.mLocation), + mOwnerNameSignal() { fetchOwnerName(); } LLPathfindingObject::~LLPathfindingObject() { + disconnectAvatarNameCacheConnection(); } LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject& pOther) @@ -115,6 +122,23 @@ std::string LLPathfindingObject::getOwnerName() const return ownerName; } +LLPathfindingObject::name_connection_t LLPathfindingObject::registerOwnerNameListener(name_callback_t pOwnerNameCallback) +{ + llassert(hasOwner()); + + name_connection_t connection; + if (hasOwnerName()) + { + pOwnerNameCallback(this); + } + else + { + connection = mOwnerNameSignal.connect(pOwnerNameCallback); + } + + return connection; +} + void LLPathfindingObject::parseObjectData(const LLSD &pObjectData) { llassert(pObjectData.has(PATHFINDING_OBJECT_NAME_FIELD)); @@ -149,7 +173,7 @@ void LLPathfindingObject::fetchOwnerName() mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName); if (!mHasOwnerName) { - LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2)); + mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2)); } } } @@ -157,6 +181,19 @@ void LLPathfindingObject::fetchOwnerName() void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName) { llassert(mOwnerUUID == pOwnerUUID); + mOwnerName = pAvatarName; mHasOwnerName = true; + + disconnectAvatarNameCacheConnection(); + + mOwnerNameSignal(this); +} + +void LLPathfindingObject::disconnectAvatarNameCacheConnection() +{ + if (mAvatarNameCacheConnection.connected()) + { + mAvatarNameCacheConnection.disconnect(); + } } diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h index d45cc554fd..b8d3ca2364 100644 --- a/indra/newview/llpathfindingobject.h +++ b/indra/newview/llpathfindingobject.h @@ -30,8 +30,11 @@ #include <string> #include <boost/shared_ptr.hpp> +#include <boost/function.hpp> +#include <boost/signals2.hpp> #include "llavatarname.h" +#include "llavatarnamecache.h" #include "lluuid.h" #include "v3math.h" @@ -59,6 +62,12 @@ public: inline BOOL isGroupOwned() const {return mIsGroupOwned;}; inline const LLVector3& getLocation() const {return mLocation;}; + typedef boost::function<void (const LLPathfindingObject *)> name_callback_t; + typedef boost::signals2::signal<void (const LLPathfindingObject *)> name_signal_t; + typedef boost::signals2::connection name_connection_t; + + name_connection_t registerOwnerNameListener(name_callback_t pOwnerNameCallback); + protected: private: @@ -66,15 +75,18 @@ private: void fetchOwnerName(); void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName); + void disconnectAvatarNameCacheConnection(); - LLUUID mUUID; - std::string mName; - std::string mDescription; - LLUUID mOwnerUUID; - bool mHasOwnerName; - LLAvatarName mOwnerName; - BOOL mIsGroupOwned; - LLVector3 mLocation; + LLUUID mUUID; + std::string mName; + std::string mDescription; + LLUUID mOwnerUUID; + bool mHasOwnerName; + LLAvatarName mOwnerName; + LLAvatarNameCache::callback_connection_t mAvatarNameCacheConnection; + BOOL mIsGroupOwned; + LLVector3 mLocation; + name_signal_t mOwnerNameSignal; }; #endif // LL_LLPATHFINDINGOBJECT_H diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp index 68a7e736e6..f1ecb45fc0 100644 --- a/indra/newview/llpathfindingobjectlist.cpp +++ b/indra/newview/llpathfindingobjectlist.cpp @@ -45,6 +45,7 @@ LLPathfindingObjectList::LLPathfindingObjectList() LLPathfindingObjectList::~LLPathfindingObjectList() { + clear(); } bool LLPathfindingObjectList::isEmpty() const @@ -52,6 +53,15 @@ bool LLPathfindingObjectList::isEmpty() const return mObjectMap.empty(); } +void LLPathfindingObjectList::clear() +{ + for (LLPathfindingObjectMap::iterator objectIter = mObjectMap.begin(); objectIter != mObjectMap.end(); ++objectIter) + { + objectIter->second.reset(); + } + mObjectMap.clear(); +} + void LLPathfindingObjectList::update(LLPathfindingObjectPtr pUpdateObjectPtr) { if (pUpdateObjectPtr != NULL) diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h index 3ad8e8b096..61580582d3 100644 --- a/indra/newview/llpathfindingobjectlist.h +++ b/indra/newview/llpathfindingobjectlist.h @@ -47,6 +47,8 @@ public: bool isEmpty() const; + void clear(); + void update(LLPathfindingObjectPtr pUpdateObjectPtr); void update(LLPathfindingObjectListPtr pUpdateObjectListPtr); @@ -56,7 +58,6 @@ public: const_iterator begin() const; const_iterator end() const; - protected: LLPathfindingObjectMap &getObjectMap(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ba9c2c9e2f..ab72b4e512 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2820,22 +2820,33 @@ bool LLStartUp::dispatchURL() void LLStartUp::setStartSLURL(const LLSLURL& slurl) { - sStartSLURL = slurl; - LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; + LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; - switch(slurl.getType()) - { - case LLSLURL::HOME_LOCATION: - case LLSLURL::LAST_LOCATION: - case LLSLURL::LOCATION: - gSavedSettings.setString("LoginLocation", LLSLURL::SIM_LOCATION_HOME); + if ( slurl.isSpatial() ) + { + std::string new_start = slurl.getSLURLString(); + LL_DEBUGS("AppInit")<<new_start<<LL_ENDL; + sStartSLURL = slurl; LLPanelLogin::onUpdateStartSLURL(slurl); // updates grid if needed - break; - default: - break; - } + + // remember that this is where we wanted to log in...if the login fails, + // the next attempt will default to the same place. + gSavedSettings.setString("NextLoginLocation", new_start); + // following a successful login, this is cleared + // and the default reverts to LoginLocation + } + else + { + LL_WARNS("AppInit")<<"Invalid start SLURL (ignored): "<<slurl.asString()<<LL_ENDL; + } } +// static +LLSLURL& LLStartUp::getStartSLURL() +{ + return sStartSLURL; +} + /** * Read all proxy configuration settings and set up both the HTTP proxy and * SOCKS proxy as needed. diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 3754aaf966..760e38890b 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -111,7 +111,7 @@ public: static void postStartupState(); static void setStartSLURL(const LLSLURL& slurl); - static LLSLURL& getStartSLURL() { return sStartSLURL; } + static LLSLURL& getStartSLURL(); static bool startLLProxy(); // Initialize the SOCKS 5 proxy diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 4ad0547379..b2e6dc4571 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2043,7 +2043,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, { if (new_angv != old_angv) { - resetRot(); + if (flagUsePhysics()) + { + resetRot(); + } + else + { + resetRotTime(); + } } // Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) @@ -5439,9 +5446,14 @@ void LLViewerObject::applyAngularVelocity(F32 dt) } } -void LLViewerObject::resetRot() +void LLViewerObject::resetRotTime() { mRotTime = 0.0f; +} + +void LLViewerObject::resetRot() +{ + resetRotTime(); // Reset the accumulated angular velocity rotation mAngularVelocityRot.loadIdentity(); diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index e60c8a8d52..22e0de681e 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -198,6 +198,9 @@ public: virtual BOOL updateLOD(); virtual BOOL setDrawableParent(LLDrawable* parentp); F32 getRotTime() { return mRotTime; } +private: + void resetRotTime(); +public: void resetRot(); void applyAngularVelocity(F32 dt); @@ -210,7 +213,7 @@ public: LLViewerRegion* getRegion() const { return mRegionp; } BOOL isSelected() const { return mUserSelected; } - virtual void setSelected(BOOL sel) { mUserSelected = sel; mRotTime = 0.f;} + virtual void setSelected(BOOL sel) { mUserSelected = sel; resetRot();} const LLUUID &getID() const { return mID; } U32 getLocalID() const { return mLocalID; } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index ae9c31bfe7..2bb2e92279 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -545,9 +545,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1, mRequestResult = PARCEL_RESULT_NO_DATA; - // clear the list of segments to prevent flashing - resetSegments(mHighlightSegments); - mFloatingParcelSelection->setParcel(mCurrentParcel); mCurrentParcelSelection->setParcel(NULL); mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel); diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMP Binary files differnew file mode 100644 index 0000000000..a567951b7a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfinding.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP Binary files differnew file mode 100644 index 0000000000..aacea8237f --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP Binary files differnew file mode 100644 index 0000000000..fa19f3f105 --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP Binary files differnew file mode 100644 index 0000000000..912b7f931a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP Binary files differnew file mode 100644 index 0000000000..4e8999ae0b --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index eaed92ac55..9bc5c7d5a4 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -4,9 +4,9 @@ can_resize="true" can_tear_off="false" height="395" - width="1015" + width="1075" min_height="395" - min_width="1015" + min_width="1075" layout="topleft" name="floater_pathfinding_linksets" help_topic="floater_pathfinding_linksets" @@ -25,11 +25,15 @@ <floater.string name="linkset_terrain_name">[Terrain]</floater.string> <floater.string name="linkset_terrain_description">--</floater.string> <floater.string name="linkset_terrain_owner">--</floater.string> + <floater.string name="linkset_terrain_scripted">--</floater.string> <floater.string name="linkset_terrain_land_impact">--</floater.string> <floater.string name="linkset_terrain_dist_from_you">--</floater.string> <floater.string name="linkset_owner_loading">[Loading]</floater.string> <floater.string name="linkset_owner_unknown">[Unknown]</floater.string> <floater.string name="linkset_owner_group">[group]</floater.string> + <floater.string name="linkset_is_scripted">Yes</floater.string> + <floater.string name="linkset_is_not_scripted">No</floater.string> + <floater.string name="linkset_is_unknown_scripted">Unknown</floater.string> <floater.string name="linkset_use_walkable">Walkable</floater.string> <floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string> <floater.string name="linkset_use_dynamic_obstacle">Movable obstacle</floater.string> @@ -47,7 +51,7 @@ follows="left|top|right|bottom" layout="topleft" height="226" - width="999"> + width="1059"> <text height="13" word_wrap="false" @@ -155,7 +159,7 @@ layout="topleft" name="apply_filters" top_pad="-21" - left_pad="31" + left_pad="91" width="73"/> <button follows="right|top" @@ -177,7 +181,7 @@ tab_stop="false" multi_select="true" name="objects_scroll_list" - width="980"> + width="1040"> <scroll_list.columns label="Name (root prim)" name="name" @@ -191,6 +195,10 @@ name="owner" width="141" /> <scroll_list.columns + label="Scripted" + name="scripted" + width="60" /> + <scroll_list.columns label="Impact" name="land_impact" width="55" /> @@ -230,7 +238,7 @@ layout="topleft" name="messaging_status" top_pad="17" - width="619"> + width="679"> Linksets: </text> <button @@ -269,7 +277,7 @@ name="horiz_separator" top_pad="0" left="18" - width="979"/> + width="1039"/> <panel border="false" bevel_style="none" @@ -277,7 +285,7 @@ layout="topleft" left="0" height="67" - width="950"> + width="1010"> <text height="13" word_wrap="false" @@ -327,7 +335,7 @@ layout="topleft" name="teleport_me_to_object" top_pad="-21" - left_pad="206" + left_pad="239" width="160"/> <button follows="right|bottom" @@ -336,7 +344,7 @@ layout="topleft" name="return_objects" top_pad="-21" - left_pad="220" + left_pad="252" width="95"/> <button follows="right|bottom" @@ -356,7 +364,7 @@ name="horiz_separator" top_pad="0" left="18" - width="979"/> + width="1039"/> <panel border="false" bevel_style="none" @@ -364,7 +372,7 @@ layout="topleft" left="0" height="75" - width="950"> + width="1010"> <text height="13" word_wrap="false" @@ -376,7 +384,7 @@ layout="topleft" left="18" top_pad="8" - width="912"> + width="972"> Edit attributes of selected linksets and press the button to apply changes </text> <combo_box diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 933135954f..606fdd33d9 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2894,7 +2894,7 @@ You have been moved into a nearby region. name="AvatarMovedLast" type="alertmodal"> <tag>fail</tag> -Your last location is not currently available. +Your requested location is not currently available. You have been moved into a nearby region. </notification> @@ -8134,9 +8134,26 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm ' <notification icon="alertmodal.tga" - name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted" + name="PathfindingLinksets_WarnOnPhantom" type="alertmodal"> - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead. +Some selected linksets will have the Phantom flag toggled. + +Do you wish to continue? + <tag>confirm</tag> + <usetemplate + ignoretext="Some selected linksets phantom flag will be toggled." + name="okcancelignore" + notext="Cancel" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="PathfindingLinksets_MismatchOnRestricted" + type="alertmodal"> +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue? <tag>confirm</tag> <usetemplate ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset." @@ -8147,9 +8164,11 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm ' <notification icon="alertmodal.tga" - name="PathfindingLinksets_SetLinksetUseMismatchOnVolume" + name="PathfindingLinksets_MismatchOnVolume" type="alertmodal"> - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue? <tag>confirm</tag> <usetemplate ignoretext="Some selected linksets cannot be set because the shape is non-convex" @@ -8160,10 +8179,47 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm ' <notification icon="alertmodal.tga" - name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume" + name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted" + type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue? + <tag>confirm</tag> + <usetemplate + ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset." + name="okcancelignore" + notext="Cancel" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="PathfindingLinksets_WarnOnPhantom_MismatchOnVolume" + type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue? + <tag>confirm</tag> + <usetemplate + ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because the shape is non-convex" + name="okcancelignore" + notext="Cancel" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume" type="alertmodal"> - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead. - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue? <tag>confirm</tag> <usetemplate ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset and because the shape is non-convex." @@ -8174,6 +8230,25 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm ' <notification icon="alertmodal.tga" + name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume" + type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue? + <tag>confirm</tag> + <usetemplate + ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset and because the shape is non-convex." + name="okcancelignore" + notext="Cancel" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="PathfindingLinksets_ChangeToFlexiblePath" type="alertmodal"> The selected object affects the navmesh. Changing it to a Flexible Path will remove it from the navmesh. diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index b7e81c4199..7705b4c567 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -60,6 +60,7 @@ static LLEventStream gTestPump("test_pump"); #include "../llslurl.h" #include "../llstartup.h" LLSLURL LLStartUp::sStartSLURL; +LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; } #include "lllogin.h" diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index c6aa9b0f11..4da774a5f6 100644 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -30,7 +30,9 @@ #include "llsd.h" #include "llupdatechecker.h" #include "lluri.h" - +#if LL_DARWIN +#include <CoreServices/CoreServices.h> +#endif #if LL_WINDOWS #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally @@ -55,7 +57,7 @@ class LLUpdateChecker::Implementation: public: Implementation(Client & client); ~Implementation(); - void check(std::string const & protocolVersion, std::string const & hostUrl, + void checkVersion(std::string const & protocolVersion, std::string const & hostUrl, std::string const & servicePath, std::string channel, std::string version); // Responder: @@ -91,10 +93,10 @@ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client): } -void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl, +void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl, std::string const & servicePath, std::string channel, std::string version) { - mImplementation->check(protocolVersion, hostUrl, servicePath, channel, version); + mImplementation->checkVersion(protocolVersion, hostUrl, servicePath, channel, version); } @@ -120,7 +122,7 @@ LLUpdateChecker::Implementation::~Implementation() } -void LLUpdateChecker::Implementation::check(std::string const & protocolVersion, std::string const & hostUrl, +void LLUpdateChecker::Implementation::checkVersion(std::string const & protocolVersion, std::string const & hostUrl, std::string const & servicePath, std::string channel, std::string version) { llassert(!mInProgress); @@ -179,7 +181,18 @@ std::string LLUpdateChecker::Implementation::buildUrl(std::string const & protoc #ifdef LL_WINDOWS static const char * platform = "win"; #elif LL_DARWIN - static const char * platform = "mac"; + long versMin; + Gestalt(gestaltSystemVersionMinor, &versMin); + + static const char *platform; + if (versMin == 5) //OS 10.5 + { + platform = "mac_legacy"; + } + else + { + platform = "mac"; + } #else static const char * platform = "lnx"; #endif diff --git a/indra/viewer_components/updater/llupdatechecker.h b/indra/viewer_components/updater/llupdatechecker.h index cea1f13647..d882169068 100644 --- a/indra/viewer_components/updater/llupdatechecker.h +++ b/indra/viewer_components/updater/llupdatechecker.h @@ -44,7 +44,7 @@ public: LLUpdateChecker(Client & client); // Check status of current app on the given host for the channel and version provided. - void check(std::string const & protocolVersion, std::string const & hostUrl, + void checkVersion(std::string const & protocolVersion, std::string const & hostUrl, std::string const & servicePath, std::string channel, std::string version); private: diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index 2e18218667..bc73c72ddc 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -509,7 +509,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event) } else { - mUpdateChecker.check(mProtocolVersion, mUrl, mPath, mChannel, mVersion); + mUpdateChecker.checkVersion(mProtocolVersion, mUrl, mPath, mChannel, mVersion); setState(LLUpdaterService::CHECKING_FOR_UPDATE); } } diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp index e19d5724f1..7c016fecf9 100644 --- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp +++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llupdaterservice_test.cpp * @brief Tests of llupdaterservice.cpp. * @@ -44,7 +44,7 @@ *****************************************************************************/ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client) {} -void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl, +void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl, std::string const & servicePath, std::string channel, std::string version) {} LLUpdateDownloader::LLUpdateDownloader(Client & ) {} |