Merge VirLinden/sunshine -> don_linden/sunshine-experimental
commit
403d1b6404
|
|
@ -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
|
||||
|
|
|
|||
386
.hgtags
386
.hgtags
|
|
@ -1,363 +1,309 @@
|
|||
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release
|
||||
003dd9461bfa479049afcc34545ab3431b147c7c v2start
|
||||
08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1
|
||||
0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2
|
||||
12769e547e30067d494a6c01479a18107366ce2f beta-5
|
||||
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
|
||||
4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0
|
||||
52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
|
||||
668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1
|
||||
6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2
|
||||
d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0
|
||||
7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4
|
||||
7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa
|
||||
80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start
|
||||
87bfaf8c76f9b22d9c65d4b315358861be87c863 2-1-1-release
|
||||
b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release
|
||||
b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6
|
||||
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release
|
||||
c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4
|
||||
d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
|
||||
d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5
|
||||
d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0
|
||||
d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
|
||||
b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6
|
||||
17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5
|
||||
3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4
|
||||
12769e547e30067d494a6c01479a18107366ce2f beta-5
|
||||
4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0
|
||||
668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1
|
||||
08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1
|
||||
80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start
|
||||
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
|
||||
19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1
|
||||
6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2
|
||||
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release
|
||||
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
|
||||
dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start
|
||||
dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
|
||||
dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
|
||||
3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1
|
||||
25bd6007e3d2fc15db9326ed4b18a24a5969a46a 2.4.0-beta2
|
||||
1ed382c6a08ba3850b6ce9061bc551ddece0ea07 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
|
||||
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3
|
||||
dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start
|
||||
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
|
||||
345b17e7cf630db77e840b4fe3451bd476d750a3 2.5.0-beta1
|
||||
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
|
||||
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
|
||||
42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
|
||||
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
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_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
|
||||
d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-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
|
||||
7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1
|
||||
800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
|
||||
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
|
||||
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
|
||||
5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
|
||||
beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1
|
||||
bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156
|
||||
beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1
|
||||
11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start
|
||||
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
|
||||
0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2
|
||||
8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
|
||||
77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release
|
||||
8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
|
||||
3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work
|
||||
7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1
|
||||
7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1
|
||||
800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
|
||||
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
|
||||
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
|
||||
dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
|
||||
dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release
|
||||
5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
|
||||
beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1
|
||||
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 2.6.9-beta1
|
||||
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
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release
|
||||
6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
|
||||
6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start
|
||||
be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
|
||||
be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
|
||||
057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
|
||||
be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
|
||||
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
|
||||
057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
|
||||
19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start
|
||||
09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
|
||||
09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-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
|
||||
09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
|
||||
6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
|
||||
6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release
|
||||
2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
|
||||
502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start
|
||||
2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1
|
||||
29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
|
||||
2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1
|
||||
29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release
|
||||
4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix
|
||||
29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
|
||||
4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix
|
||||
4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix
|
||||
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
|
||||
599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
|
||||
599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release
|
||||
46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start
|
||||
b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1
|
||||
b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
|
||||
6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start
|
||||
82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start
|
||||
364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1
|
||||
364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1
|
||||
f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start
|
||||
1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release
|
||||
b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1
|
||||
b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1
|
||||
1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
|
||||
42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1
|
||||
42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1
|
||||
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2
|
||||
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 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
|
||||
82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start
|
||||
364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1
|
||||
364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1
|
||||
f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start
|
||||
42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1
|
||||
42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1
|
||||
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2
|
||||
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2
|
||||
b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start
|
||||
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
|
||||
0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release
|
||||
0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release
|
||||
586907287be581817b2422b5137971b22d54ea48 3.0.4-start
|
||||
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
|
||||
2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3
|
||||
3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
|
||||
3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
|
||||
c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
|
||||
3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
|
||||
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
|
||||
9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1
|
||||
523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
|
||||
523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1
|
||||
80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start
|
||||
a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
|
||||
9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-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
|
||||
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
|
||||
a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
|
||||
40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start
|
||||
523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1
|
||||
523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
|
||||
80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start
|
||||
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
|
||||
3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start
|
||||
3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1
|
||||
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
|
||||
16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1
|
||||
987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2
|
||||
987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2
|
||||
987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2
|
||||
51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release
|
||||
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
|
||||
a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159
|
||||
9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157
|
||||
5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160
|
||||
1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1
|
||||
f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1
|
||||
1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144
|
||||
f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144
|
||||
089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161
|
||||
600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162
|
||||
c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163
|
||||
2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164
|
||||
80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165
|
||||
fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2
|
||||
af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169
|
||||
4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3
|
||||
6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release
|
||||
57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176
|
||||
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
|
||||
005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167
|
||||
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
|
||||
888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
|
||||
4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179
|
||||
4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180
|
||||
9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184
|
||||
47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190
|
||||
5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183
|
||||
6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4
|
||||
9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184
|
||||
ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5
|
||||
28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release
|
||||
a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182
|
||||
1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1
|
||||
81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186
|
||||
78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194
|
||||
47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190
|
||||
cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181
|
||||
c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188
|
||||
9ee9387789701d597130f879d9011a4958753862 DRTVWR-189
|
||||
ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198
|
||||
e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193
|
||||
33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195
|
||||
421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192
|
||||
4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191
|
||||
33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195
|
||||
e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193
|
||||
78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194
|
||||
7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196
|
||||
ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198
|
||||
507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197
|
||||
b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2
|
||||
37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200
|
||||
182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3
|
||||
248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203
|
||||
6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199
|
||||
7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2
|
||||
7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201
|
||||
84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4
|
||||
de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202
|
||||
34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag
|
||||
6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205
|
||||
|
|
|
|||
|
|
@ -2183,6 +2183,8 @@
|
|||
<array>
|
||||
<string>-configuration Release</string>
|
||||
<string>-project SecondLife.xcodeproj</string>
|
||||
<string>-DENABLE_SIGNING:BOOL=YES</string>
|
||||
<string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>configure</key>
|
||||
|
|
@ -2210,6 +2212,8 @@
|
|||
<array>
|
||||
<string>-configuration Release</string>
|
||||
<string>-project SecondLife.xcodeproj</string>
|
||||
<string>-DENABLE_SIGNING:BOOL=YES</string>
|
||||
<string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>configure</key>
|
||||
|
|
@ -2459,6 +2463,18 @@
|
|||
</map>
|
||||
<key>configure</key>
|
||||
<map>
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>SecondLife.sln</string>
|
||||
<string>--config</string>
|
||||
<string>Debug</string>
|
||||
<string>--startup</string>
|
||||
<string>secondlife-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
|
|
@ -2535,6 +2551,18 @@
|
|||
</map>
|
||||
<key>configure</key>
|
||||
<map>
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>SecondLife.sln</string>
|
||||
<string>--config</string>
|
||||
<string>RelWithDebInfo</string>
|
||||
<string>--startup</string>
|
||||
<string>secondlife-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
|
|
@ -2611,6 +2639,18 @@
|
|||
</map>
|
||||
<key>configure</key>
|
||||
<map>
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>SecondLife.sln</string>
|
||||
<string>--config</string>
|
||||
<string>Release</string>
|
||||
<string>--startup</string>
|
||||
<string>secondlife-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
|
|
|
|||
|
|
@ -174,6 +174,7 @@ Ansariel Hiller
|
|||
VWR-26150
|
||||
STORM-1685
|
||||
STORM-1713
|
||||
STORM-1899
|
||||
Aralara Rajal
|
||||
Ardy Lay
|
||||
STORM-859
|
||||
|
|
@ -400,6 +401,7 @@ Gaberoonie Zanzibar
|
|||
Ganymedes Costagravas
|
||||
Geenz Spad
|
||||
STORM-1823
|
||||
STORM-1900
|
||||
Gene Frostbite
|
||||
GeneJ Composer
|
||||
Geneko Nemeth
|
||||
|
|
@ -636,6 +638,7 @@ Jonathan Yap
|
|||
STORM-1809
|
||||
STORM-1793
|
||||
STORM-1810
|
||||
STORM-1877
|
||||
STORM-1860
|
||||
STORM-1852
|
||||
STORM-1870
|
||||
|
|
@ -644,6 +647,7 @@ Jonathan Yap
|
|||
STORM-1862
|
||||
Kadah Coba
|
||||
STORM-1060
|
||||
STORM-1843
|
||||
Jondan Lundquist
|
||||
Josef Munster
|
||||
Josette Windlow
|
||||
|
|
@ -654,6 +658,8 @@ Kage Pixel
|
|||
VWR-11
|
||||
Kagehi Kohn
|
||||
Kaimen Takahe
|
||||
Katharine Berry
|
||||
STORM-1900
|
||||
Keklily Longfall
|
||||
Ken Lavender
|
||||
Ken March
|
||||
|
|
@ -739,6 +745,7 @@ Marianne McCann
|
|||
Marine Kelley
|
||||
STORM-281
|
||||
MartinRJ Fayray
|
||||
STORM-1844
|
||||
STORM-1845
|
||||
Matthew Anthony
|
||||
Matthew Dowd
|
||||
|
|
@ -1108,9 +1115,12 @@ Sudane Erato
|
|||
Synystyr Texan
|
||||
Takeda Terrawyng
|
||||
TankMaster Finesmith
|
||||
OPEN-140
|
||||
OPEN-142
|
||||
STORM-1100
|
||||
STORM-1602
|
||||
STORM-1258
|
||||
STORM-1602
|
||||
STORM-1868
|
||||
VWR-26622
|
||||
Talamasca
|
||||
Tali Rosca
|
||||
|
|
@ -1228,6 +1238,8 @@ Watty Berkson
|
|||
Westley Schridde
|
||||
Westley Streeter
|
||||
Whimsy Winx
|
||||
Whirly Fizzle
|
||||
STORM-1895
|
||||
Whoops Babii
|
||||
VWR-631
|
||||
VWR-1640
|
||||
|
|
|
|||
|
|
@ -385,14 +385,6 @@
|
|||
<key>trusted-sender</key>
|
||||
<boolean>true</boolean>
|
||||
</map>
|
||||
|
||||
<key>ParcelMediaURLFilter</key>
|
||||
<map>
|
||||
<key>flavor</key>
|
||||
<string>llsd</string>
|
||||
<key>trusted-sender</key>
|
||||
<boolean>false</boolean>
|
||||
</map>
|
||||
|
||||
<key>ParcelNavigateMedia</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ if (WINDOWS)
|
|||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||
CACHE STRING "C++ compiler release options" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
|
||||
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||
set(CMAKE_C_STANDARD_LIBRARIES "")
|
||||
|
|
@ -206,6 +207,10 @@ if (DARWIN)
|
|||
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
||||
if (XCODE_VERSION GREATER 4.2)
|
||||
set(ENABLE_SIGNING TRUE)
|
||||
set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.")
|
||||
endif (XCODE_VERSION GREATER 4.2)
|
||||
endif (DARWIN)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -99,10 +99,20 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(DARWIN 1)
|
||||
|
||||
execute_process(
|
||||
COMMAND sh -c "xcodebuild -version | grep Xcode | cut -d ' ' -f2 | cut -d'.' -f1-2"
|
||||
OUTPUT_VARIABLE XCODE_VERSION )
|
||||
|
||||
# To support a different SDK update these Xcode settings:
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
|
||||
if (XCODE_VERSION GREATER 4.2)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
|
||||
else (XCODE_VERSION GREATER 4.2)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
|
||||
endif (XCODE_VERSION GREATER 4.2)
|
||||
|
||||
set(CMAKE_OSX_SYSROOT macosx10.6)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
|
||||
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym)
|
||||
|
||||
# NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
|
||||
|
|
@ -134,6 +144,11 @@ set(VIEWER ON CACHE BOOL "Build Second Life viewer.")
|
|||
set(VIEWER_CHANNEL "LindenDeveloper" CACHE STRING "Viewer Channel Name")
|
||||
set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for A/B Testing")
|
||||
|
||||
if (XCODE_VERSION GREATER 4.2)
|
||||
set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
|
||||
set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")
|
||||
endif (XCODE_VERSION GREATER 4.2)
|
||||
|
||||
set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
|
||||
set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.")
|
||||
set(UNATTENDED OFF CACHE BOOL "Should be set to ON for building with VC Express editions.")
|
||||
|
|
|
|||
|
|
@ -167,7 +167,12 @@ ARGUMENTS=[
|
|||
dict(name='version',
|
||||
description="""This specifies the version of Second Life that is
|
||||
being packaged up.""",
|
||||
default=get_default_version)
|
||||
default=get_default_version),
|
||||
dict(name='signature',
|
||||
description="""This specifies an identity to sign the viewer with, if any.
|
||||
If no value is supplied, the default signature will be used, if any. Currently
|
||||
only used on Mac OS X.""",
|
||||
default=None)
|
||||
]
|
||||
|
||||
def usage(srctree=""):
|
||||
|
|
|
|||
|
|
@ -132,18 +132,68 @@ BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
{
|
||||
if (mNewPose != HAND_POSE_RELAXED && mNewPose != mCurrentPose)
|
||||
{
|
||||
mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
|
||||
// Only set param weight for poses other than
|
||||
// default (HAND_POSE_SPREAD); HAND_POSE_SPREAD
|
||||
// is not an animatable morph!
|
||||
if (mNewPose != HAND_POSE_SPREAD)
|
||||
{
|
||||
mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
|
||||
}
|
||||
|
||||
// Reset morph weight for current pose back to its
|
||||
// full extend or it might be stuck somewhere in the middle if a
|
||||
// pose is requested and the old pose is requested again shortly
|
||||
// after while still blending to the other pose!
|
||||
if (mCurrentPose != HAND_POSE_SPREAD)
|
||||
{
|
||||
mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
|
||||
}
|
||||
|
||||
// Update visual params now if we won't blend
|
||||
if (mCurrentPose == HAND_POSE_RELAXED)
|
||||
{
|
||||
mCharacter->updateVisualParams();
|
||||
}
|
||||
}
|
||||
mNewPose = HAND_POSE_RELAXED;
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is a new morph we didn't know about before
|
||||
if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose && mNewPose != HAND_POSE_SPREAD)
|
||||
// Sometimes we seem to get garbage here, with poses that are out of bounds.
|
||||
// So check for a valid pose first.
|
||||
if (*requestedHandPose >= 0 && *requestedHandPose < NUM_HAND_POSES)
|
||||
{
|
||||
mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
|
||||
// This is a new morph we didn't know about before:
|
||||
// Reset morph weight for both current and new pose
|
||||
// back their starting values while still blending.
|
||||
if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose)
|
||||
{
|
||||
if (mNewPose != HAND_POSE_SPREAD)
|
||||
{
|
||||
mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
|
||||
}
|
||||
|
||||
// Reset morph weight for current pose back to its full extend
|
||||
// or it might be stuck somewhere in the middle if a pose is
|
||||
// requested and the old pose is requested again shortly after
|
||||
// while still blending to the other pose!
|
||||
if (mCurrentPose != HAND_POSE_SPREAD)
|
||||
{
|
||||
mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
|
||||
}
|
||||
|
||||
// Update visual params now if we won't blend
|
||||
if (mCurrentPose == *requestedHandPose)
|
||||
{
|
||||
mCharacter->updateVisualParams();
|
||||
}
|
||||
}
|
||||
mNewPose = *requestedHandPose;
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Requested hand pose out of range. Ignoring requested pose." << llendl;
|
||||
}
|
||||
mNewPose = *requestedHandPose;
|
||||
}
|
||||
|
||||
mCharacter->removeAnimationData("Hand Pose");
|
||||
|
|
|
|||
|
|
@ -193,8 +193,6 @@ void LLParcel::init(const LLUUID &owner_id,
|
|||
mMediaWidth = 0;
|
||||
mMediaHeight = 0;
|
||||
setMediaCurrentURL(LLStringUtil::null);
|
||||
mMediaURLFilterEnable = FALSE;
|
||||
mMediaURLFilterList = LLSD::emptyArray();
|
||||
mMediaAllowNavigate = TRUE;
|
||||
mMediaURLTimeout = 0.0f;
|
||||
mMediaPreventCameraZoom = FALSE;
|
||||
|
|
@ -336,38 +334,6 @@ void LLParcel::setMediaURLResetTimer(F32 time)
|
|||
mMediaResetTimer.setTimerExpirySec(time);
|
||||
}
|
||||
|
||||
void LLParcel::setMediaURLFilterList(LLSD list)
|
||||
{
|
||||
// sanity check LLSD
|
||||
// must be array of strings
|
||||
if (!list.isArray())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (S32 i = 0; i < list.size(); i++)
|
||||
{
|
||||
if (!list[i].isString())
|
||||
return;
|
||||
}
|
||||
|
||||
// can't be too big
|
||||
const S32 MAX_SIZE = 50;
|
||||
if (list.size() > MAX_SIZE)
|
||||
{
|
||||
LLSD new_list = LLSD::emptyArray();
|
||||
|
||||
for (S32 i = 0; i < llmin(list.size(), MAX_SIZE); i++)
|
||||
{
|
||||
new_list.append(list[i]);
|
||||
}
|
||||
|
||||
list = new_list;
|
||||
}
|
||||
|
||||
mMediaURLFilterList = list;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLParcel::setLocalID(S32 local_id)
|
||||
{
|
||||
|
|
@ -622,34 +588,6 @@ BOOL LLParcel::importAccessEntry(std::istream& input_stream, LLAccessEntry* entr
|
|||
return input_stream.good();
|
||||
}
|
||||
|
||||
BOOL LLParcel::importMediaURLFilter(std::istream& input_stream, std::string& url)
|
||||
{
|
||||
skip_to_end_of_next_keyword("{", input_stream);
|
||||
|
||||
while(input_stream.good())
|
||||
{
|
||||
skip_comments_and_emptyspace(input_stream);
|
||||
std::string line, keyword, value;
|
||||
get_line(line, input_stream, MAX_STRING);
|
||||
get_keyword_and_value(keyword, value, line);
|
||||
|
||||
if ("}" == keyword)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ("url" == keyword)
|
||||
{
|
||||
url = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Unknown keyword in parcel media url filter section: <"
|
||||
<< keyword << ">" << llendl;
|
||||
}
|
||||
}
|
||||
return input_stream.good();
|
||||
}
|
||||
|
||||
// Assumes we are in a block "ParcelData"
|
||||
void LLParcel::packMessage(LLMessageSystem* msg)
|
||||
{
|
||||
|
|
@ -696,8 +634,6 @@ void LLParcel::packMessage(LLSD& msg)
|
|||
msg["media_allow_navigate"] = getMediaAllowNavigate();
|
||||
msg["media_prevent_camera_zoom"] = getMediaPreventCameraZoom();
|
||||
msg["media_url_timeout"] = getMediaURLTimeout();
|
||||
msg["media_url_filter_enable"] = getMediaURLFilterEnable();
|
||||
msg["media_url_filter_list"] = getMediaURLFilterList();
|
||||
msg["group_id"] = getGroupID();
|
||||
msg["pass_price"] = mPassPrice;
|
||||
msg["pass_hours"] = mPassHours;
|
||||
|
|
@ -789,7 +725,6 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
|
|||
msg->getString("MediaLinkSharing", "MediaCurrentURL", buffer);
|
||||
setMediaCurrentURL(buffer);
|
||||
msg->getU8 ( "MediaLinkSharing", "MediaAllowNavigate", mMediaAllowNavigate );
|
||||
msg->getU8 ( "MediaLinkSharing", "MediaURLFilterEnable", mMediaURLFilterEnable );
|
||||
msg->getU8 ( "MediaLinkSharing", "MediaPreventCameraZoom", mMediaPreventCameraZoom );
|
||||
msg->getF32( "MediaLinkSharing", "MediaURLTimeout", mMediaURLTimeout);
|
||||
}
|
||||
|
|
@ -1250,8 +1185,6 @@ void LLParcel::clearParcel()
|
|||
mMediaWidth = 0;
|
||||
mMediaHeight = 0;
|
||||
setMediaCurrentURL(LLStringUtil::null);
|
||||
setMediaURLFilterList(LLSD::emptyArray());
|
||||
setMediaURLFilterEnable(FALSE);
|
||||
setMediaAllowNavigate(TRUE);
|
||||
setMediaPreventCameraZoom(FALSE);
|
||||
setMediaURLTimeout(0.0f);
|
||||
|
|
|
|||
|
|
@ -247,8 +247,6 @@ public:
|
|||
void setMediaWidth(S32 width);
|
||||
void setMediaHeight(S32 height);
|
||||
void setMediaCurrentURL(const std::string& url);
|
||||
void setMediaURLFilterEnable(U8 enable) { mMediaURLFilterEnable = enable; }
|
||||
void setMediaURLFilterList(LLSD list);
|
||||
void setMediaAllowNavigate(U8 enable) { mMediaAllowNavigate = enable; }
|
||||
void setMediaURLTimeout(F32 timeout) { mMediaURLTimeout = timeout; }
|
||||
void setMediaPreventCameraZoom(U8 enable) { mMediaPreventCameraZoom = enable; }
|
||||
|
|
@ -310,7 +308,6 @@ public:
|
|||
|
||||
// BOOL importStream(std::istream& input_stream);
|
||||
BOOL importAccessEntry(std::istream& input_stream, LLAccessEntry* entry);
|
||||
BOOL importMediaURLFilter(std::istream& input_stream, std::string& url);
|
||||
// BOOL exportStream(std::ostream& output_stream);
|
||||
|
||||
void packMessage(LLMessageSystem* msg);
|
||||
|
|
@ -354,8 +351,6 @@ public:
|
|||
U8 getMediaAutoScale() const { return mMediaAutoScale; }
|
||||
U8 getMediaLoop() const { return mMediaLoop; }
|
||||
const std::string& getMediaCurrentURL() const { return mMediaCurrentURL; }
|
||||
U8 getMediaURLFilterEnable() const { return mMediaURLFilterEnable; }
|
||||
LLSD getMediaURLFilterList() const { return mMediaURLFilterList; }
|
||||
U8 getMediaAllowNavigate() const { return mMediaAllowNavigate; }
|
||||
F32 getMediaURLTimeout() const { return mMediaURLTimeout; }
|
||||
U8 getMediaPreventCameraZoom() const { return mMediaPreventCameraZoom; }
|
||||
|
|
@ -651,8 +646,6 @@ protected:
|
|||
U8 mMediaLoop;
|
||||
std::string mMediaCurrentURL;
|
||||
LLUUID mMediaID;
|
||||
U8 mMediaURLFilterEnable;
|
||||
LLSD mMediaURLFilterList;
|
||||
U8 mMediaAllowNavigate;
|
||||
U8 mMediaPreventCameraZoom;
|
||||
F32 mMediaURLTimeout;
|
||||
|
|
|
|||
|
|
@ -657,8 +657,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
|
||||
|
|
@ -674,7 +676,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -687,7 +689,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -704,15 +706,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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -993,7 +993,12 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);
|
|||
}
|
||||
#endif
|
||||
|
||||
#if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1070
|
||||
#include <OpenGL/gl.h>
|
||||
#else
|
||||
#include <AGL/gl.h>
|
||||
#endif
|
||||
|
||||
|
||||
#endif // LL_MESA / LL_WINDOWS / LL_DARWIN
|
||||
|
||||
|
|
|
|||
|
|
@ -748,6 +748,10 @@ void LLFloater::closeFloater(bool app_quitting)
|
|||
dependee->setFocus(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
// STORM-1879: since this floater has focus, treat the closeFloater- call
|
||||
// like a click on the close-button, and close gear- and contextmenus
|
||||
LLMenuGL::sMenuContainer->hideMenus();
|
||||
}
|
||||
|
||||
dirtyRect();
|
||||
|
|
|
|||
|
|
@ -57,7 +57,9 @@ void LLToggleableMenu::handleVisibilityChange (BOOL curVisibilityIn)
|
|||
S32 x,y;
|
||||
LLUI::getMousePositionLocal(LLUI::getRootView(), &x, &y);
|
||||
|
||||
if (!curVisibilityIn && mButtonRect.pointInRect(x, y))
|
||||
// STORM-1879: also check MouseCapture to see if the button was really
|
||||
// clicked (otherwise the VisibilityChange was triggered via keyboard shortcut)
|
||||
if (!curVisibilityIn && mButtonRect.pointInRect(x, y) && gFocusMgr.getMouseCapture())
|
||||
{
|
||||
mClosedByButtonClick = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/**
|
||||
/**
|
||||
* @file lldir.h
|
||||
* @brief Definition of directory utilities class
|
||||
*
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
*/
|
||||
|
||||
#if LL_DARWIN
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
*/
|
||||
|
||||
#if !LL_DARWIN
|
||||
#error This header must not be included when compiling for any target other than Mac OS. Consider including lldir.h instead.
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,10 @@ include(GLOD)
|
|||
include(CMakeCopyIfDifferent)
|
||||
include(LLAppearance)
|
||||
|
||||
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}
|
||||
|
|
@ -1943,6 +1946,12 @@ if (DARWIN)
|
|||
)
|
||||
|
||||
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
|
||||
|
||||
if (ENABLE_SIGNING)
|
||||
set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}")
|
||||
else (ENABLE_SIGNING)
|
||||
set(SIGNING_SETTING "")
|
||||
endif (ENABLE_SIGNING)
|
||||
|
||||
if (PACKAGE)
|
||||
add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
|
||||
|
|
@ -1962,6 +1971,7 @@ if (DARWIN)
|
|||
--login_channel=${VIEWER_LOGIN_CHANNEL}
|
||||
--source=${CMAKE_CURRENT_SOURCE_DIR}
|
||||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
|
||||
${SIGNING_SETTING}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
)
|
||||
|
|
|
|||
|
|
@ -12384,17 +12384,6 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>UseServerTextureBaking</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Update appearance via the ServerTextureBaking cap, if available</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderSynchronousOcclusion</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -46,6 +46,6 @@ void main()
|
|||
frag_data[0] = vec4(diff.rgb, 0.0);
|
||||
frag_data[1] = vec4(0,0,0,0);
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,5 +52,5 @@ void main()
|
|||
frag_data[1] = vertex_color.aaaa; // spec
|
||||
//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
|
||||
vec3 nvn = normalize(tnorm);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,6 @@ void main()
|
|||
frag_data[0] = vec4(col.rgb, 0.0);
|
||||
frag_data[1] = vec4(0,0,0,0); // spec
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,5 +48,5 @@ void main()
|
|||
frag_data[0] = vec4(col.rgb, 0.0);
|
||||
frag_data[1] = vec4(0,0,0,0);
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,6 @@ void main()
|
|||
frag_data[0] = vec4(col.rgb, 0.0);
|
||||
frag_data[1] = vec4(0,0,0,0); // spec
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,6 @@ void main()
|
|||
frag_data[1] = vertex_color.aaaa; // spec
|
||||
//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,5 +41,5 @@ void main()
|
|||
frag_data[1] = vertex_color.aaaa; // spec
|
||||
//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ void main()
|
|||
}
|
||||
|
||||
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
norm = normalize(norm);
|
||||
vec4 spec = texture2DRect(specularRect, frag.xy);
|
||||
vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ void main()
|
|||
}
|
||||
|
||||
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
float da = dot(norm, lv);
|
||||
if (da < 0.0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ void main()
|
|||
float depth = texture2DRect(depthMap, tc.xy).r;
|
||||
vec3 pos = getPosition_d(tc, depth).xyz;
|
||||
vec3 norm = texture2DRect(normalMap, tc).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
|
||||
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
|
||||
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ void main()
|
|||
vec4 pos = getPosition(pos_screen);
|
||||
|
||||
vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
|
||||
frag_color[0] = 1.0;
|
||||
frag_color[1] = calcAmbientOcclusion(pos, norm);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,6 @@ void main()
|
|||
frag_data[0] = vec4(outColor.rgb, 0.0);
|
||||
frag_data[1] = vec4(0,0,0,0);
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,5 +48,5 @@ void main()
|
|||
frag_data[0] = vec4(vertex_color.rgb*col.rgb, 0.0);
|
||||
frag_data[1] = vec4(0,0,0,0);
|
||||
vec3 nvn = normalize(vary_normal);
|
||||
frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
|
||||
frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -161,5 +161,5 @@ void main()
|
|||
|
||||
frag_data[0] = vec4(color.rgb, 0.5); // diffuse
|
||||
frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
|
||||
frag_data[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace
|
||||
frag_data[2] = vec4(screenspacewavef.xyz*0.5+0.5, screenspacewavef.z*0.5); // normalxyz, displace
|
||||
}
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ void main()
|
|||
}
|
||||
|
||||
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
|
||||
norm = normalize(norm);
|
||||
float l_dist = -dot(lv, proj_n);
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ void main()
|
|||
float depth = texture2DRect(depthMap, tc.xy).r;
|
||||
vec3 pos = getPosition_d(tc, depth).xyz;
|
||||
vec3 norm = texture2DRect(normalMap, tc).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
|
||||
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
|
||||
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ void main()
|
|||
}
|
||||
|
||||
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
|
||||
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
|
||||
norm = (norm.xyz-0.5)*2.0; // unpack norm
|
||||
|
||||
norm = normalize(norm);
|
||||
float l_dist = -dot(lv, proj_n);
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ void main()
|
|||
vec4 pos = getPosition(pos_screen);
|
||||
|
||||
vec4 nmap4 = texture2DRect(normalMap, pos_screen);
|
||||
nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
|
||||
nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
|
||||
float displace = nmap4.w;
|
||||
vec3 norm = nmap4.xyz;
|
||||
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ void main()
|
|||
vec4 pos = getPosition(pos_screen);
|
||||
|
||||
vec4 nmap4 = texture2DRect(normalMap, pos_screen);
|
||||
nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
|
||||
nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
|
||||
float displace = nmap4.w;
|
||||
vec3 norm = nmap4.xyz;
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1715,7 +1715,7 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty
|
|||
}
|
||||
}
|
||||
|
||||
// Combines userRemoveAllAttachments() and userAttachMultipleAttachments() logic to
|
||||
// Combines userRemoveMulipleAttachments() and userAttachMultipleAttachments() logic to
|
||||
// get attachments into desired state with minimal number of adds/removes.
|
||||
void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array)
|
||||
{
|
||||
|
|
@ -1811,31 +1811,6 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo
|
|||
gMessageSystem->sendReliable(gAgent.getRegionHost());
|
||||
}
|
||||
|
||||
void LLAgentWearables::userRemoveAllAttachments()
|
||||
{
|
||||
if (!isAgentAvatarValid()) return;
|
||||
|
||||
llvo_vec_t objects_to_remove;
|
||||
|
||||
for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
|
||||
iter != gAgentAvatarp->mAttachmentPoints.end();)
|
||||
{
|
||||
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
|
||||
LLViewerJointAttachment* attachment = curiter->second;
|
||||
for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
|
||||
attachment_iter != attachment->mAttachedObjects.end();
|
||||
++attachment_iter)
|
||||
{
|
||||
LLViewerObject *attached_object = (*attachment_iter);
|
||||
if (attached_object)
|
||||
{
|
||||
objects_to_remove.push_back(attached_object);
|
||||
}
|
||||
}
|
||||
}
|
||||
userRemoveMultipleAttachments(objects_to_remove);
|
||||
}
|
||||
|
||||
void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_array_t& obj_item_array)
|
||||
{
|
||||
// Build a compound message to send all the objects that need to be rezzed.
|
||||
|
|
|
|||
|
|
@ -214,7 +214,6 @@ public:
|
|||
|
||||
static void userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array);
|
||||
static void userRemoveMultipleAttachments(llvo_vec_t& llvo_array);
|
||||
static void userRemoveAllAttachments();
|
||||
static void userAttachMultipleAttachments(LLInventoryModel::item_array_t& obj_item_array);
|
||||
|
||||
BOOL itemUpdatePending(const LLUUID& item_id) const;
|
||||
|
|
|
|||
|
|
@ -698,7 +698,7 @@ void LLWearableHoldingPattern::clearCOFLinksForMissingWearables()
|
|||
{
|
||||
// Wearable link that was never resolved; remove links to it from COF
|
||||
LL_INFOS("Avatar") << self_av_string() << "removing link for unresolved item " << data.mItemID.asString() << LL_ENDL;
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID,false);
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -812,7 +812,7 @@ void LLWearableHoldingPattern::handleLateArrivals()
|
|||
if (data.mWearable && data.mIsReplacement &&
|
||||
replaced_types.find(data.mWearableType) != replaced_types.end())
|
||||
{
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID,false);
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID);
|
||||
std::list<LLFoundData>::iterator clobber_ator = iter;
|
||||
++iter;
|
||||
getFoundList().erase(clobber_ator);
|
||||
|
|
@ -1052,7 +1052,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
|
|||
if ((replace && wearable_count != 0) ||
|
||||
(wearable_count >= LLAgentWearables::MAX_CLOTHING_PER_TYPE) )
|
||||
{
|
||||
removeCOFItemLinks(gAgentWearables.getWearableItemID(item_to_wear->getWearableType(), wearable_count-1), false);
|
||||
removeCOFItemLinks(gAgentWearables.getWearableItemID(item_to_wear->getWearableType(), wearable_count-1));
|
||||
}
|
||||
addCOFItemLink(item_to_wear, do_update, cb);
|
||||
}
|
||||
|
|
@ -1062,7 +1062,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
|
|||
|
||||
// Remove the existing wearables of the same type.
|
||||
// Remove existing body parts anyway because we must not be able to wear e.g. two skins.
|
||||
removeCOFLinksOfType(item_to_wear->getWearableType(), false);
|
||||
removeCOFLinksOfType(item_to_wear->getWearableType());
|
||||
|
||||
addCOFItemLink(item_to_wear, do_update, cb);
|
||||
break;
|
||||
|
|
@ -1160,11 +1160,13 @@ void LLAppearanceMgr::takeOffOutfit(const LLUUID& cat_id)
|
|||
|
||||
LLInventoryModel::item_array_t::const_iterator it = items.begin();
|
||||
const LLInventoryModel::item_array_t::const_iterator it_end = items.end();
|
||||
uuid_vec_t uuids_to_remove;
|
||||
for( ; it_end != it; ++it)
|
||||
{
|
||||
LLViewerInventoryItem* item = *it;
|
||||
removeItemFromAvatar(item->getUUID());
|
||||
uuids_to_remove.push_back(item->getUUID());
|
||||
}
|
||||
removeItemsFromAvatar(uuids_to_remove);
|
||||
}
|
||||
|
||||
// Create a copy of src_id + contents as a subfolder of dst_id.
|
||||
|
|
@ -2213,7 +2215,62 @@ void LLAppearanceMgr::addEnsembleLink( LLInventoryCategory* cat, bool do_update
|
|||
#endif
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, bool do_update)
|
||||
void LLAppearanceMgr::removeAllClothesFromAvatar()
|
||||
{
|
||||
// Fetch worn clothes (i.e. the ones in COF).
|
||||
LLInventoryModel::item_array_t clothing_items;
|
||||
LLInventoryModel::cat_array_t dummy;
|
||||
LLIsType is_clothing(LLAssetType::AT_CLOTHING);
|
||||
gInventory.collectDescendentsIf(getCOF(),
|
||||
dummy,
|
||||
clothing_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_clothing,
|
||||
false);
|
||||
uuid_vec_t item_ids;
|
||||
for (LLInventoryModel::item_array_t::iterator it = clothing_items.begin();
|
||||
it != clothing_items.end(); ++it)
|
||||
{
|
||||
item_ids.push_back((*it).get()->getLinkedUUID());
|
||||
}
|
||||
|
||||
// Take them off by removing from COF.
|
||||
removeItemsFromAvatar(item_ids);
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::removeAllAttachmentsFromAvatar()
|
||||
{
|
||||
if (!isAgentAvatarValid()) return;
|
||||
|
||||
LLAgentWearables::llvo_vec_t objects_to_remove;
|
||||
|
||||
for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
|
||||
iter != gAgentAvatarp->mAttachmentPoints.end();)
|
||||
{
|
||||
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
|
||||
LLViewerJointAttachment* attachment = curiter->second;
|
||||
for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
|
||||
attachment_iter != attachment->mAttachedObjects.end();
|
||||
++attachment_iter)
|
||||
{
|
||||
LLViewerObject *attached_object = (*attachment_iter);
|
||||
if (attached_object)
|
||||
{
|
||||
objects_to_remove.push_back(attached_object);
|
||||
}
|
||||
}
|
||||
}
|
||||
uuid_vec_t ids_to_remove;
|
||||
for (LLAgentWearables::llvo_vec_t::iterator it = objects_to_remove.begin();
|
||||
it != objects_to_remove.end();
|
||||
++it)
|
||||
{
|
||||
ids_to_remove.push_back((*it)->getAttachmentItemID());
|
||||
}
|
||||
removeItemsFromAvatar(ids_to_remove);
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id)
|
||||
{
|
||||
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
|
||||
|
||||
|
|
@ -2231,13 +2288,9 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, bool do_update)
|
|||
gInventory.purgeObject(item->getUUID());
|
||||
}
|
||||
}
|
||||
if (do_update)
|
||||
{
|
||||
LLAppearanceMgr::updateAppearanceFromCOF();
|
||||
}
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::removeCOFLinksOfType(LLWearableType::EType type, bool do_update)
|
||||
void LLAppearanceMgr::removeCOFLinksOfType(LLWearableType::EType type)
|
||||
{
|
||||
LLFindWearablesOfType filter_wearables_of_type(type);
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
|
|
@ -2253,11 +2306,6 @@ void LLAppearanceMgr::removeCOFLinksOfType(LLWearableType::EType type, bool do_u
|
|||
gInventory.purgeObject(item->getUUID());
|
||||
}
|
||||
}
|
||||
|
||||
if (do_update)
|
||||
{
|
||||
updateAppearanceFromCOF();
|
||||
}
|
||||
}
|
||||
|
||||
bool sort_by_linked_uuid(const LLViewerInventoryItem* item1, const LLViewerInventoryItem* item2)
|
||||
|
|
@ -2603,7 +2651,18 @@ void LLAppearanceMgr::updateClothingOrderingInfo(LLUUID cat_id, bool update_base
|
|||
class RequestAgentUpdateAppearanceResponder: public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
RequestAgentUpdateAppearanceResponder() {}
|
||||
RequestAgentUpdateAppearanceResponder()
|
||||
{
|
||||
llinfos << "request created" << llendl;
|
||||
}
|
||||
|
||||
// Successful completion.
|
||||
/* virtual */ void result(const LLSD& content)
|
||||
{
|
||||
llinfos << "request OK" << llendl;
|
||||
}
|
||||
|
||||
// Error
|
||||
/*virtual*/ void error(U32 status, const std::string& reason)
|
||||
{
|
||||
llwarns << "appearance update request failed, reason: " << reason << llendl;
|
||||
|
|
@ -2619,7 +2678,8 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
|
|||
std::string url = gAgent.getRegion()->getCapability("UpdateAvatarAppearance");
|
||||
if (url.empty())
|
||||
{
|
||||
llwarns << "no cap for UpdateAvatarAppearance" << llendl;
|
||||
llwarns << "NO CAP for UpdateAvatarAppearance. This is a bug." << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD body;
|
||||
|
|
@ -2705,33 +2765,26 @@ void LLAppearanceMgr::wearBaseOutfit()
|
|||
updateCOF(base_outfit_id);
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::removeItemsFromAvatar(const uuid_vec_t& ids_to_remove)
|
||||
{
|
||||
if (ids_to_remove.empty())
|
||||
{
|
||||
llwarns << "called with empty list, nothing to do" << llendl;
|
||||
}
|
||||
for (uuid_vec_t::const_iterator it = ids_to_remove.begin(); it != ids_to_remove.end(); ++it)
|
||||
{
|
||||
const LLUUID& id_to_remove = *it;
|
||||
const LLUUID& linked_item_id = gInventory.getLinkedItemID(id_to_remove);
|
||||
removeCOFItemLinks(linked_item_id);
|
||||
}
|
||||
updateAppearanceFromCOF();
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove)
|
||||
{
|
||||
LLViewerInventoryItem * item_to_remove = gInventory.getItem(id_to_remove);
|
||||
if (!item_to_remove) return;
|
||||
|
||||
switch (item_to_remove->getType())
|
||||
{
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
if (get_is_item_worn(id_to_remove))
|
||||
{
|
||||
//*TODO move here the exact removing code from LLWearableBridge::removeItemFromAvatar in the future
|
||||
LLWearableBridge::removeItemFromAvatar(item_to_remove);
|
||||
}
|
||||
break;
|
||||
case LLAssetType::AT_OBJECT:
|
||||
LLVOAvatarSelf::detachAttachmentIntoInventory(item_to_remove->getLinkedUUID());
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// *HACK: Force to remove garbage from COF.
|
||||
// Unworn links or objects can't be processed by existed removing functionality
|
||||
// since it is not designed for such cases. As example attachment object can't be removed
|
||||
// since sever don't sends message _PREHASH_KillObject in that case.
|
||||
// Also we can't check is link was successfully removed from COF since in case
|
||||
// deleting attachment link removing performs asynchronously in process_kill_object callback.
|
||||
removeCOFItemLinks(id_to_remove,false);
|
||||
LLUUID linked_item_id = gInventory.getLinkedItemID(id_to_remove);
|
||||
removeCOFItemLinks(linked_item_id);
|
||||
updateAppearanceFromCOF();
|
||||
}
|
||||
|
||||
bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_body)
|
||||
|
|
@ -2905,7 +2958,7 @@ void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id)
|
|||
|
||||
if (mAttachmentInvLinkEnabled)
|
||||
{
|
||||
LLAppearanceMgr::removeCOFItemLinks(item_id, false);
|
||||
LLAppearanceMgr::removeCOFItemLinks(item_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -132,8 +132,10 @@ public:
|
|||
void addCOFItemLink(const LLInventoryItem *item, bool do_update = true, LLPointer<LLInventoryCallback> cb = NULL);
|
||||
|
||||
// Remove COF entries
|
||||
void removeCOFItemLinks(const LLUUID& item_id, bool do_update = true);
|
||||
void removeCOFLinksOfType(LLWearableType::EType type, bool do_update = true);
|
||||
void removeCOFItemLinks(const LLUUID& item_id);
|
||||
void removeCOFLinksOfType(LLWearableType::EType type);
|
||||
void removeAllClothesFromAvatar();
|
||||
void removeAllAttachmentsFromAvatar();
|
||||
|
||||
// Add COF link to ensemble folder.
|
||||
void addEnsembleLink(LLInventoryCategory* item, bool do_update = true);
|
||||
|
|
@ -164,6 +166,7 @@ public:
|
|||
bool updateBaseOutfit();
|
||||
|
||||
//Remove clothing or detach an object from the agent (a bodypart cannot be removed)
|
||||
void removeItemsFromAvatar(const uuid_vec_t& item_ids);
|
||||
void removeItemFromAvatar(const LLUUID& item_id);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -139,8 +139,7 @@ protected:
|
|||
{
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
|
||||
functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
|
||||
registrar.add("Attachment.Detach", boost::bind(handleMultiple, take_off, mUUIDs));
|
||||
registrar.add("Attachment.Detach", boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), mUUIDs));
|
||||
|
||||
return createFromFile("menu_cof_attachment.xml");
|
||||
}
|
||||
|
|
@ -173,9 +172,8 @@ protected:
|
|||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
|
||||
LLUUID selected_id = mUUIDs.back();
|
||||
functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
|
||||
|
||||
registrar.add("Clothing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs));
|
||||
registrar.add("Clothing.TakeOff", boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), mUUIDs));
|
||||
registrar.add("Clothing.Replace", boost::bind(replaceWearable, selected_id));
|
||||
registrar.add("Clothing.Edit", boost::bind(LLAgentWearables::editWearable, selected_id));
|
||||
registrar.add("Clothing.Create", boost::bind(&CofClothingContextMenu::createNew, this, selected_id));
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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[2]["value"] = getOwnerName(pLinksetPtr);
|
||||
|
||||
columns[3]["column"] = "land_impact";
|
||||
columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact());
|
||||
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"] = "dist_from_you";
|
||||
columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));
|
||||
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]["value"] = linksetUse;
|
||||
|
||||
columns[6]["column"] = "a_percent";
|
||||
columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA());
|
||||
columns[7]["column"] = "a_percent";
|
||||
columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA());
|
||||
|
||||
columns[7]["column"] = "b_percent";
|
||||
columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB());
|
||||
columns[8]["column"] = "b_percent";
|
||||
columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB());
|
||||
|
||||
columns[8]["column"] = "c_percent";
|
||||
columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC());
|
||||
columns[9]["column"] = "c_percent";
|
||||
columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC());
|
||||
|
||||
columns[9]["column"] = "d_percent";
|
||||
columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD());
|
||||
columns[10]["column"] = "d_percent";
|
||||
columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD());
|
||||
|
||||
LLSD element;
|
||||
element["id"] = pLinksetPtr->getUUID().asString();
|
||||
element["column"] = columns;
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
mLoadingAvatarNames.insert(pAvatarId);
|
||||
LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2));
|
||||
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())
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@
|
|||
// newview includes
|
||||
#include "llsidetraypanelcontainer.h"
|
||||
#include "lltransientfloatermgr.h"
|
||||
#include "llpaneloutfitedit.h"
|
||||
#include "llsidepanelappearance.h"
|
||||
|
||||
//static
|
||||
const std::string LLFloaterSidePanelContainer::sMainPanelName("main_panel");
|
||||
|
|
@ -54,6 +56,26 @@ void LLFloaterSidePanelContainer::onOpen(const LLSD& key)
|
|||
getChild<LLPanel>(sMainPanelName)->onOpen(key);
|
||||
}
|
||||
|
||||
void LLFloaterSidePanelContainer::onClickCloseBtn()
|
||||
{
|
||||
llinfos << "close clicked" << llendl;
|
||||
|
||||
LLPanelOutfitEdit* panel_outfit_edit =
|
||||
dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit"));
|
||||
if (panel_outfit_edit && panel_outfit_edit->getVisible())
|
||||
{
|
||||
LLFloater *parent = gFloaterView->getParentFloater(panel_outfit_edit);
|
||||
if (parent == this)
|
||||
{
|
||||
LLSidepanelAppearance* panel_appearance =
|
||||
dynamic_cast<LLSidepanelAppearance*>(getPanel("appearance"));
|
||||
panel_appearance->showOutfitsInventoryPanel();
|
||||
}
|
||||
}
|
||||
|
||||
LLFloater::onClickCloseBtn();
|
||||
}
|
||||
|
||||
LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_name, const LLSD& params)
|
||||
{
|
||||
LLView* view = findChildView(panel_name, true);
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ public:
|
|||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void onClickCloseBtn();
|
||||
|
||||
LLPanel* openChildPanel(const std::string& panel_name, const LLSD& params);
|
||||
|
||||
static void showPanel(const std::string& floater_name, const LLSD& key);
|
||||
|
|
|
|||
|
|
@ -133,7 +133,6 @@ public:
|
|||
if(tools_floater)
|
||||
{
|
||||
tools_floater->updateLandImpacts();
|
||||
tools_floater->dirty();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@ void LLGestureMgr::deactivateGesture(const LLUUID& item_id)
|
|||
|
||||
gAgent.sendReliableMessage();
|
||||
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(base_item_id, false);
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(base_item_id);
|
||||
|
||||
notifyObservers();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,6 +71,9 @@
|
|||
#include "llviewerwindow.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llwearablelist.h"
|
||||
#include "lllandmarkactions.h"
|
||||
|
||||
void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);
|
||||
|
||||
// Marketplace outbox current disabled
|
||||
#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 1
|
||||
|
|
@ -107,8 +110,6 @@ void dec_busy_count()
|
|||
}
|
||||
|
||||
// Function declarations
|
||||
void remove_inventory_category_from_avatar(LLInventoryCategory* category);
|
||||
void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);
|
||||
bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
|
||||
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
|
||||
void teleport_via_landmark(const LLUUID& asset_id);
|
||||
|
|
@ -1399,6 +1400,29 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
|
|||
const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
|
||||
copy_item_to_outbox(itemp, outbox_id, LLUUID::null, LLToolDragAndDrop::getOperationId());
|
||||
}
|
||||
else if ("copy_slurl" == action)
|
||||
{
|
||||
LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
|
||||
if(item)
|
||||
{
|
||||
LLUUID asset_id = item->getAssetUUID();
|
||||
LLLandmark* landmark = gLandmarkList.getAsset(asset_id);
|
||||
if (landmark)
|
||||
{
|
||||
LLVector3d global_pos;
|
||||
landmark->getGlobalPos(global_pos);
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, ©_slurl_to_clipboard_callback_inv, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void copy_slurl_to_clipboard_callback_inv(const std::string& slurl)
|
||||
{
|
||||
gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
|
||||
LLSD args;
|
||||
args["SLURL"] = slurl;
|
||||
LLNotificationsUtil::add("CopySLURL", args);
|
||||
}
|
||||
|
||||
void LLItemBridge::selectItem()
|
||||
|
|
@ -2764,7 +2788,7 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
|
|||
LLViewerInventoryCategory* cat = getCategory();
|
||||
if(!cat) return;
|
||||
|
||||
remove_inventory_category_from_avatar ( cat );
|
||||
LLAppearanceMgr::instance().takeOffOutfit( cat->getLinkedUUID() );
|
||||
return;
|
||||
}
|
||||
else if ("purge" == action)
|
||||
|
|
@ -4403,6 +4427,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
}
|
||||
|
||||
items.push_back(std::string("Landmark Separator"));
|
||||
items.push_back(std::string("url_copy"));
|
||||
items.push_back(std::string("About Landmark"));
|
||||
}
|
||||
|
||||
|
|
@ -4411,6 +4436,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
// info panel can be shown at a time.
|
||||
if ((flags & FIRST_SELECTED_ITEM) == 0)
|
||||
{
|
||||
disabled_items.push_back(std::string("url_copy"));
|
||||
disabled_items.push_back(std::string("About Landmark"));
|
||||
}
|
||||
|
||||
|
|
@ -5073,11 +5099,7 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)
|
|||
}
|
||||
else if (isRemoveAction(action))
|
||||
{
|
||||
LLInventoryItem* item = gInventory.getItem(mUUID);
|
||||
if(item)
|
||||
{
|
||||
LLVOAvatarSelf::detachAttachmentIntoInventory(item->getLinkedUUID());
|
||||
}
|
||||
LLAppearanceMgr::instance().removeItemFromAvatar(mUUID);
|
||||
}
|
||||
else LLItemBridge::performAction(model, action);
|
||||
}
|
||||
|
|
@ -5369,120 +5391,6 @@ LLWearableBridge::LLWearableBridge(LLInventoryPanel* inventory,
|
|||
mInvType = inv_type;
|
||||
}
|
||||
|
||||
void remove_inventory_category_from_avatar( LLInventoryCategory* category )
|
||||
{
|
||||
if(!category) return;
|
||||
lldebugs << "remove_inventory_category_from_avatar( " << category->getName()
|
||||
<< " )" << llendl;
|
||||
|
||||
|
||||
if (gAgentCamera.cameraCustomizeAvatar())
|
||||
{
|
||||
// switching to outfit editor should automagically save any currently edited wearable
|
||||
LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_outfit"));
|
||||
}
|
||||
|
||||
remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() );
|
||||
}
|
||||
|
||||
struct OnRemoveStruct
|
||||
{
|
||||
LLUUID mUUID;
|
||||
OnRemoveStruct(const LLUUID& uuid):
|
||||
mUUID(uuid)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id)
|
||||
{
|
||||
|
||||
// Find all the wearables that are in the category's subtree.
|
||||
lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl;
|
||||
if(proceed)
|
||||
{
|
||||
LLInventoryModel::cat_array_t cat_array;
|
||||
LLInventoryModel::item_array_t item_array;
|
||||
LLFindWearables is_wearable;
|
||||
gInventory.collectDescendentsIf(category_id,
|
||||
cat_array,
|
||||
item_array,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_wearable);
|
||||
S32 i;
|
||||
S32 wearable_count = item_array.count();
|
||||
|
||||
LLInventoryModel::cat_array_t obj_cat_array;
|
||||
LLInventoryModel::item_array_t obj_item_array;
|
||||
LLIsType is_object( LLAssetType::AT_OBJECT );
|
||||
gInventory.collectDescendentsIf(category_id,
|
||||
obj_cat_array,
|
||||
obj_item_array,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_object);
|
||||
S32 obj_count = obj_item_array.count();
|
||||
|
||||
// Find all gestures in this folder
|
||||
LLInventoryModel::cat_array_t gest_cat_array;
|
||||
LLInventoryModel::item_array_t gest_item_array;
|
||||
LLIsType is_gesture( LLAssetType::AT_GESTURE );
|
||||
gInventory.collectDescendentsIf(category_id,
|
||||
gest_cat_array,
|
||||
gest_item_array,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_gesture);
|
||||
S32 gest_count = gest_item_array.count();
|
||||
|
||||
if (wearable_count > 0) //Loop through wearables. If worn, remove.
|
||||
{
|
||||
for(i = 0; i < wearable_count; ++i)
|
||||
{
|
||||
LLViewerInventoryItem *item = item_array.get(i);
|
||||
if (item->getType() == LLAssetType::AT_BODYPART)
|
||||
continue;
|
||||
if (gAgent.isTeen() && item->isWearableType() &&
|
||||
(item->getWearableType() == LLWearableType::WT_UNDERPANTS || item->getWearableType() == LLWearableType::WT_UNDERSHIRT))
|
||||
continue;
|
||||
if (get_is_item_worn(item->getUUID()))
|
||||
{
|
||||
LLWearableList::instance().getAsset(item->getAssetUUID(),
|
||||
item->getName(),
|
||||
item->getType(),
|
||||
LLWearableBridge::onRemoveFromAvatarArrived,
|
||||
new OnRemoveStruct(item->getLinkedUUID()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (obj_count > 0)
|
||||
{
|
||||
for(i = 0; i < obj_count; ++i)
|
||||
{
|
||||
LLViewerInventoryItem *obj_item = obj_item_array.get(i);
|
||||
if (get_is_item_worn(obj_item->getUUID()))
|
||||
{
|
||||
LLVOAvatarSelf::detachAttachmentIntoInventory(obj_item->getLinkedUUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gest_count > 0)
|
||||
{
|
||||
for(i = 0; i < gest_count; ++i)
|
||||
{
|
||||
LLViewerInventoryItem *gest_item = gest_item_array.get(i);
|
||||
if (get_is_item_worn(gest_item->getUUID()))
|
||||
{
|
||||
LLGestureMgr::instance().deactivateGesture( gest_item->getLinkedUUID() );
|
||||
gInventory.updateItem( gest_item );
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLWearableBridge::renameItem(const std::string& new_name)
|
||||
{
|
||||
if (get_is_item_worn(mUUID))
|
||||
|
|
@ -5778,95 +5686,12 @@ BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLWearableBridge::onRemoveFromAvatar(void* user_data)
|
||||
{
|
||||
LLWearableBridge* self = (LLWearableBridge*)user_data;
|
||||
if(!self) return;
|
||||
if(get_is_item_worn(self->mUUID))
|
||||
{
|
||||
LLViewerInventoryItem* item = self->getItem();
|
||||
if (item)
|
||||
{
|
||||
LLUUID parent_id = item->getParentUUID();
|
||||
LLWearableList::instance().getAsset(item->getAssetUUID(),
|
||||
item->getName(),
|
||||
item->getType(),
|
||||
onRemoveFromAvatarArrived,
|
||||
new OnRemoveStruct(LLUUID(self->mUUID)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLWearableBridge::onRemoveFromAvatarArrived(LLViewerWearable* wearable,
|
||||
void* userdata)
|
||||
{
|
||||
OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata;
|
||||
const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID);
|
||||
if(wearable)
|
||||
{
|
||||
if( get_is_item_worn( item_id ) )
|
||||
{
|
||||
LLWearableType::EType type = wearable->getType();
|
||||
|
||||
if( !(type==LLWearableType::WT_SHAPE || type==LLWearableType::WT_SKIN || type==LLWearableType::WT_HAIR || type==LLWearableType::WT_EYES ) ) //&&
|
||||
//!((!gAgent.isTeen()) && ( type==LLWearableType::WT_UNDERPANTS || type==LLWearableType::WT_UNDERSHIRT )) )
|
||||
{
|
||||
bool do_remove_all = false;
|
||||
U32 index = gAgentWearables.getWearableIndex(wearable);
|
||||
gAgentWearables.removeWearable( type, do_remove_all, index );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Find and remove this item from the COF.
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false);
|
||||
gInventory.notifyObservers();
|
||||
|
||||
delete on_remove_struct;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLWearableBridge::removeAllClothesFromAvatar()
|
||||
{
|
||||
// Fetch worn clothes (i.e. the ones in COF).
|
||||
LLInventoryModel::item_array_t clothing_items;
|
||||
LLInventoryModel::cat_array_t dummy;
|
||||
LLIsType is_clothing(LLAssetType::AT_CLOTHING);
|
||||
gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(),
|
||||
dummy,
|
||||
clothing_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_clothing,
|
||||
false);
|
||||
|
||||
// Take them off by removing from COF.
|
||||
for (LLInventoryModel::item_array_t::const_iterator it = clothing_items.begin(); it != clothing_items.end(); ++it)
|
||||
{
|
||||
LLAppearanceMgr::instance().removeItemFromAvatar((*it)->getUUID());
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLWearableBridge::removeItemFromAvatar(LLViewerInventoryItem *item)
|
||||
{
|
||||
if (item)
|
||||
{
|
||||
LLWearableList::instance().getAsset(item->getAssetUUID(),
|
||||
item->getName(),
|
||||
item->getType(),
|
||||
LLWearableBridge::onRemoveFromAvatarArrived,
|
||||
new OnRemoveStruct(item->getUUID()));
|
||||
}
|
||||
}
|
||||
|
||||
void LLWearableBridge::removeFromAvatar()
|
||||
{
|
||||
llwarns << "safe to remove?" << llendl;
|
||||
if (get_is_item_worn(mUUID))
|
||||
{
|
||||
LLViewerInventoryItem* item = getItem();
|
||||
removeItemFromAvatar(item);
|
||||
LLAppearanceMgr::instance().removeItemFromAvatar(mUUID);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -197,6 +197,8 @@ public:
|
|||
const LLUUID& uuid) :
|
||||
LLInvFVBridge(inventory, root, uuid) {}
|
||||
|
||||
typedef boost::function<void(std::string& slurl)> slurl_callback_t;
|
||||
|
||||
virtual void performAction(LLInventoryModel* model, std::string action);
|
||||
virtual void selectItem();
|
||||
virtual void restoreItem();
|
||||
|
|
@ -214,7 +216,6 @@ public:
|
|||
virtual BOOL isItemCopyable() const;
|
||||
virtual BOOL hasChildren() const { return FALSE; }
|
||||
virtual BOOL isUpToDate() const { return TRUE; }
|
||||
|
||||
/*virtual*/ void clearDisplayName() { mDisplayName.clear(); }
|
||||
|
||||
LLViewerInventoryItem* getItem() const;
|
||||
|
|
@ -497,9 +498,6 @@ public:
|
|||
void editOnAvatar();
|
||||
|
||||
static BOOL canRemoveFromAvatar( void* userdata );
|
||||
static void onRemoveFromAvatar( void* userdata );
|
||||
static void onRemoveFromAvatarArrived( LLViewerWearable* wearable, void* userdata );
|
||||
static void removeItemFromAvatar(LLViewerInventoryItem *item);
|
||||
static void removeAllClothesFromAvatar();
|
||||
void removeFromAvatar();
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@
|
|||
|
||||
#include "llmutelist.h"
|
||||
|
||||
#include "pipeline.h"
|
||||
|
||||
#include <boost/tokenizer.hpp>
|
||||
|
||||
#include "lldispatcher.h"
|
||||
|
|
@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const
|
|||
return last_name == "Linden";
|
||||
}
|
||||
|
||||
static LLVOAvatar* find_avatar(const LLUUID& id)
|
||||
{
|
||||
LLViewerObject *obj = gObjectList.findObject(id);
|
||||
while (obj && obj->isAttachment())
|
||||
{
|
||||
obj = (LLViewerObject *)obj->getParent();
|
||||
}
|
||||
|
||||
if (obj && obj->isAvatar())
|
||||
{
|
||||
return (LLVOAvatar*)obj;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
|
||||
{
|
||||
|
|
@ -288,6 +307,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
|
|||
LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
|
||||
}
|
||||
}
|
||||
//mute local lights that are attached to the avatar
|
||||
LLVOAvatar *avatarp = find_avatar(localmute.mID);
|
||||
if (avatarp)
|
||||
{
|
||||
LLPipeline::removeMutedAVsLights(avatarp);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1044,7 +1044,7 @@ void LLPanelEditWearable::saveChanges(bool force_save_as)
|
|||
if (force_save_as)
|
||||
{
|
||||
// the name of the wearable has changed, re-save wearable with new name
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(mWearablePtr->getItemID(),false);
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(mWearablePtr->getItemID());
|
||||
gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, new_name, FALSE);
|
||||
mNameEditor->setText(mWearableItem->getName());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,11 +77,7 @@ private:
|
|||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
mPanelWearing->getSelectedItemsUUIDs(selected_uuids);
|
||||
|
||||
for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it)
|
||||
{
|
||||
LLAppearanceMgr::instance().removeItemFromAvatar(*it);
|
||||
}
|
||||
LLAppearanceMgr::instance().removeItemsFromAvatar(selected_uuids);
|
||||
}
|
||||
|
||||
LLToggleableMenu* mMenu;
|
||||
|
|
@ -97,12 +93,11 @@ protected:
|
|||
{
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
|
||||
functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
|
||||
|
||||
registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
|
||||
registrar.add("Wearing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs));
|
||||
registrar.add("Wearing.Detach", boost::bind(handleMultiple, take_off, mUUIDs));
|
||||
|
||||
registrar.add("Wearing.TakeOff",
|
||||
boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), mUUIDs));
|
||||
registrar.add("Wearing.Detach",
|
||||
boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), mUUIDs));
|
||||
LLContextMenu* menu = createFromFile("menu_wearing_tab.xml");
|
||||
|
||||
updateMenuItemsVisibility(menu);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@ void LLStatusBar::onMouseEnterVolume()
|
|||
LLRect vol_btn_rect = volbtn->getRect();
|
||||
LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
|
||||
volume_pulldown_rect.setLeftTopAndSize(vol_btn_rect.mLeft -
|
||||
(volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth())/2,
|
||||
(volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth()),
|
||||
vol_btn_rect.mBottom,
|
||||
volume_pulldown_rect.getWidth(),
|
||||
volume_pulldown_rect.getHeight());
|
||||
|
|
|
|||
|
|
@ -334,32 +334,24 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
|
|||
}
|
||||
|
||||
U32 ignore_btn_width = 0;
|
||||
U32 mute_btn_pad = 0;
|
||||
if (mIsScriptDialog && ignore_btn != NULL)
|
||||
{
|
||||
LLRect ignore_btn_rect(ignore_btn->getRect());
|
||||
S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
|
||||
S32 ignore_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - ignore_btn_rect.getWidth();
|
||||
if (ignore_btn_left + ignore_btn_rect.getWidth() > max_width)// make sure that the ignore button is in panel
|
||||
{
|
||||
ignore_btn_left = max_width - ignore_btn_rect.getWidth() - 2 * HPAD;
|
||||
}
|
||||
S32 ignore_btn_left = max_width - ignore_btn_rect.getWidth();
|
||||
ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom
|
||||
ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());
|
||||
ignore_btn->setRect(ignore_btn_rect);
|
||||
ignore_btn_width = ignore_btn_rect.getWidth();
|
||||
mControlPanel->addChild(ignore_btn, -1);
|
||||
mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists
|
||||
}
|
||||
|
||||
if (mIsScriptDialog && mute_btn != NULL)
|
||||
{
|
||||
LLRect mute_btn_rect(mute_btn->getRect());
|
||||
S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
|
||||
// Place mute (Block) button to the left of the ignore button.
|
||||
S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2);
|
||||
if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel
|
||||
{
|
||||
mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD;
|
||||
}
|
||||
S32 mute_btn_left = max_width - mute_btn_rect.getWidth() - ignore_btn_width - mute_btn_pad;
|
||||
mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom
|
||||
mute_btn_rect.getWidth(), mute_btn_rect.getHeight());
|
||||
mute_btn->setRect(mute_btn_rect);
|
||||
|
|
|
|||
|
|
@ -2798,7 +2798,7 @@ class LLSelfRemoveAllAttachments : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLAgentWearables::userRemoveAllAttachments();
|
||||
LLAppearanceMgr::instance().removeAllAttachmentsFromAvatar();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
@ -6389,23 +6389,21 @@ class LLAttachmentDetachFromPoint : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& user_data)
|
||||
{
|
||||
uuid_vec_t ids_to_remove;
|
||||
const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL);
|
||||
if (attachment->getNumObjects() > 0)
|
||||
{
|
||||
gMessageSystem->newMessage("ObjectDetach");
|
||||
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
|
||||
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
|
||||
for (LLViewerJointAttachment::attachedobjs_vec_t::const_iterator iter = attachment->mAttachedObjects.begin();
|
||||
iter != attachment->mAttachedObjects.end();
|
||||
iter++)
|
||||
{
|
||||
LLViewerObject *attached_object = (*iter);
|
||||
gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
|
||||
gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, attached_object->getLocalID());
|
||||
ids_to_remove.push_back(attached_object->getAttachmentItemID());
|
||||
}
|
||||
gMessageSystem->sendReliable( gAgent.getRegionHost() );
|
||||
}
|
||||
if (!ids_to_remove.empty())
|
||||
{
|
||||
LLAppearanceMgr::instance().removeItemsFromAvatar(ids_to_remove);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -6478,17 +6476,8 @@ class LLAttachmentDetach : public view_listener_t
|
|||
return true;
|
||||
}
|
||||
|
||||
// The sendDetach() method works on the list of selected
|
||||
// objects. Thus we need to clear the list, make sure it only
|
||||
// contains the object the user clicked, send the message,
|
||||
// then clear the list.
|
||||
// We use deselectAll to update the simulator's notion of what's
|
||||
// selected, and removeAll just to change things locally.
|
||||
//RN: I thought it was more useful to detach everything that was selected
|
||||
if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
|
||||
{
|
||||
LLSelectMgr::getInstance()->sendDetach();
|
||||
}
|
||||
LLAppearanceMgr::instance().removeItemFromAvatar(object->getAttachmentItemID());
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
@ -7631,6 +7620,10 @@ void handle_rebake_textures(void*)
|
|||
// Slam pending upload count to "unstick" things
|
||||
bool slam_for_debug = true;
|
||||
gAgentAvatarp->forceBakeAllTextures(slam_for_debug);
|
||||
if (gAgent.getRegion() && gAgent.getRegion()->getCentralBakeVersion())
|
||||
{
|
||||
LLAppearanceMgr::instance().requestServerAppearanceUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void toggle_visibility(void* user_data)
|
||||
|
|
@ -7897,7 +7890,7 @@ class LLEditTakeOff : public view_listener_t
|
|||
{
|
||||
std::string clothing = userdata.asString();
|
||||
if (clothing == "all")
|
||||
LLWearableBridge::removeAllClothesFromAvatar();
|
||||
LLAppearanceMgr::instance().removeAllClothesFromAvatar();
|
||||
else
|
||||
{
|
||||
LLWearableType::EType type = LLWearableType::typeNameToType(clothing);
|
||||
|
|
@ -7907,8 +7900,8 @@ class LLEditTakeOff : public view_listener_t
|
|||
{
|
||||
// MULTI-WEARABLES: assuming user wanted to remove top shirt.
|
||||
U32 wearable_index = gAgentWearables.getWearableCount(type) - 1;
|
||||
LLViewerInventoryItem *item = dynamic_cast<LLViewerInventoryItem*>(gAgentWearables.getWearableInventoryItem(type,wearable_index));
|
||||
LLWearableBridge::removeItemFromAvatar(item);
|
||||
LLUUID item_id = gAgentWearables.getWearableItemID(type,wearable_index);
|
||||
LLAppearanceMgr::instance().removeItemFromAvatar(item_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -5456,9 +5463,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();
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -1658,9 +1658,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
// Request access list information for this land
|
||||
parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN);
|
||||
|
||||
// Request the media url filter list for this land
|
||||
parcel_mgr.requestParcelMediaURLFilter();
|
||||
|
||||
// Request dwell for this land, if it's not public land.
|
||||
parcel_mgr.mSelectedDwell = DWELL_NAN;
|
||||
if (0 != local_id)
|
||||
|
|
@ -1989,67 +1986,6 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)
|
|||
}
|
||||
}
|
||||
|
||||
class LLParcelMediaURLFilterResponder : public LLHTTPClient::Responder
|
||||
{
|
||||
virtual void result(const LLSD& content)
|
||||
{
|
||||
LLViewerParcelMgr::getInstance()->receiveParcelMediaURLFilter(content);
|
||||
}
|
||||
};
|
||||
|
||||
void LLViewerParcelMgr::requestParcelMediaURLFilter()
|
||||
{
|
||||
if (!mSelected)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
|
||||
if (!region)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLParcel* parcel = mCurrentParcel;
|
||||
if (!parcel)
|
||||
{
|
||||
llwarns << "no parcel" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD body;
|
||||
body["local-id"] = parcel->getLocalID();
|
||||
body["list"] = parcel->getMediaURLFilterList();
|
||||
|
||||
std::string url = region->getCapability("ParcelMediaURLFilterList");
|
||||
if (!url.empty())
|
||||
{
|
||||
LLHTTPClient::post(url, body, new LLParcelMediaURLFilterResponder);
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "can't get ParcelMediaURLFilterList cap" << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLViewerParcelMgr::receiveParcelMediaURLFilter(const LLSD &content)
|
||||
{
|
||||
if (content.has("list"))
|
||||
{
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->mCurrentParcel;
|
||||
if (!parcel) return;
|
||||
|
||||
if (content["local-id"].asInteger() == parcel->getLocalID())
|
||||
{
|
||||
parcel->setMediaURLFilterList(content["list"]);
|
||||
|
||||
LLViewerParcelMgr::getInstance()->notifyObservers();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLViewerParcelMgr::deedLandToGroup()
|
||||
{
|
||||
std::string group_name;
|
||||
|
|
|
|||
|
|
@ -223,11 +223,6 @@ public:
|
|||
// Takes an Access List flag, like AL_ACCESS or AL_BAN
|
||||
void sendParcelAccessListRequest(U32 flags);
|
||||
|
||||
// asks for the parcel's media url filter list
|
||||
void requestParcelMediaURLFilter();
|
||||
// receive the response
|
||||
void receiveParcelMediaURLFilter(const LLSD &content);
|
||||
|
||||
// Dwell is not part of the usual parcel update information because the
|
||||
// simulator doesn't actually know the per-parcel dwell. Ack! We have
|
||||
// to get it out of the database.
|
||||
|
|
|
|||
|
|
@ -1453,17 +1453,7 @@ void LLViewerRegion::unpackRegionHandshake()
|
|||
}
|
||||
|
||||
|
||||
mCentralBakeVersion = (S32)gSavedSettings.getBOOL("UseServerTextureBaking");
|
||||
/*
|
||||
if (msg->getSize("RegionInfo4", "CentralBakesVersion") > 0)
|
||||
{
|
||||
msg->getS32("RegionInfo4", "CentralBakesVersion", mCentralBakeVersion);
|
||||
}
|
||||
else
|
||||
{
|
||||
mCentralBakeVersion = 0;
|
||||
}
|
||||
*/
|
||||
mCentralBakeVersion = region_protocols & 1; // was (S32)gSavedSettings.getBOOL("UseServerTextureBaking");
|
||||
LLVLComposition *compp = getComposition();
|
||||
if (compp)
|
||||
{
|
||||
|
|
@ -1567,7 +1557,6 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
|||
capabilityNames.append("NewFileAgentInventory");
|
||||
capabilityNames.append("ObjectNavMeshProperties");
|
||||
capabilityNames.append("ParcelPropertiesUpdate");
|
||||
capabilityNames.append("ParcelMediaURLFilterList");
|
||||
capabilityNames.append("ParcelNavigateMedia");
|
||||
capabilityNames.append("ParcelVoiceInfoRequest");
|
||||
capabilityNames.append("ProductInfoRequest");
|
||||
|
|
|
|||
|
|
@ -1298,7 +1298,7 @@ BOOL LLVOAvatarSelf::detachAttachmentIntoInventory(const LLUUID &item_id)
|
|||
const LLViewerObject *attached_obj = gAgentAvatarp->getWornAttachment(item_id);
|
||||
if (!attached_obj)
|
||||
{
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(item_id, false);
|
||||
LLAppearanceMgr::instance().removeCOFItemLinks(item_id);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -788,23 +788,24 @@ LLContextMenu* LLWearableItemsList::ContextMenu::createMenu()
|
|||
const uuid_vec_t& ids = mUUIDs; // selected items IDs
|
||||
LLUUID selected_id = ids.front(); // ID of the first selected item
|
||||
|
||||
functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
|
||||
|
||||
// Register handlers common for all wearable types.
|
||||
registrar.add("Wearable.Wear", boost::bind(wear_multiple, ids, true));
|
||||
registrar.add("Wearable.Add", boost::bind(wear_multiple, ids, false));
|
||||
registrar.add("Wearable.Edit", boost::bind(handleMultiple, LLAgentWearables::editWearable, ids));
|
||||
registrar.add("Wearable.CreateNew", boost::bind(createNewWearable, selected_id));
|
||||
registrar.add("Wearable.ShowOriginal", boost::bind(show_item_original, selected_id));
|
||||
registrar.add("Wearable.TakeOffDetach", boost::bind(handleMultiple, take_off, ids));
|
||||
registrar.add("Wearable.TakeOffDetach",
|
||||
boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), ids));
|
||||
|
||||
// Register handlers for clothing.
|
||||
registrar.add("Clothing.TakeOff", boost::bind(handleMultiple, take_off, ids));
|
||||
registrar.add("Clothing.TakeOff",
|
||||
boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), ids));
|
||||
|
||||
// Register handlers for body parts.
|
||||
|
||||
// Register handlers for attachments.
|
||||
registrar.add("Attachment.Detach", boost::bind(handleMultiple, take_off, ids));
|
||||
registrar.add("Attachment.Detach",
|
||||
boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), ids));
|
||||
registrar.add("Attachment.Profile", boost::bind(show_item_profile, selected_id));
|
||||
registrar.add("Object.Attach", boost::bind(LLViewerAttachMenu::attachObjects, ids, _2));
|
||||
|
||||
|
|
|
|||
|
|
@ -1694,6 +1694,21 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)
|
|||
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPipeline::removeMutedAVsLights(LLVOAvatar* muted_avatar)
|
||||
{
|
||||
LLFastTimer t(FTM_REMOVE_FROM_LIGHT_SET);
|
||||
for (light_set_t::iterator iter = gPipeline.mNearbyLights.begin();
|
||||
iter != gPipeline.mNearbyLights.end(); iter++)
|
||||
{
|
||||
if (iter->drawable->getVObj()->isAttachment() && iter->drawable->getVObj()->getAvatar() == muted_avatar)
|
||||
{
|
||||
gPipeline.mLights.erase(iter->drawable);
|
||||
gPipeline.mNearbyLights.erase(iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
U32 LLPipeline::addObject(LLViewerObject *vobj)
|
||||
{
|
||||
LLMemType mt_ao(LLMemType::MTYPE_PIPELINE_ADD_OBJECT);
|
||||
|
|
|
|||
|
|
@ -151,6 +151,8 @@ public:
|
|||
|
||||
void unlinkDrawable(LLDrawable*);
|
||||
|
||||
static void removeMutedAVsLights(LLVOAvatar*);
|
||||
|
||||
// Object related methods
|
||||
void markVisible(LLDrawable *drawablep, LLCamera& camera);
|
||||
void markOccluder(LLSpatialGroup* group);
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="volumepulldown_floater" width="240">
|
||||
<button left="217" name="prefs_btn"/>
|
||||
<slider label="Master" name="System Volume" label_width="80" width="180"/>
|
||||
<slider label="Schaltflächen" label_width="80" width="180" name="UI Volume"/>
|
||||
<slider label="Umgebung" label_width="80" width="180" name="Wind Volume"/>
|
||||
<slider label="Soundeffekte" label_width="80" width="180" name="SFX Volume"/>
|
||||
<check_box name="gesture_audio_play_btn" tool_tip="Sounds von Gesten abspielen"/>
|
||||
<slider label="Musikstream" label_width="80" width="180" name="Music Volume"/>
|
||||
<check_box tool_tip="Musikstream aktivieren" name="enable_music"/>
|
||||
<slider label="Medien" label_width="80" width="180" name="Media Volume"/>
|
||||
<check_box tool_tip="Medienstream aktivieren" name="enable_media"/>
|
||||
<slider label="Voice-Chat" label_width="80" width="180" name="Voice Volume"/>
|
||||
<check_box tool_tip="Voice-Chat aktivieren" name="enable_voice_check"/>
|
||||
</panel>
|
||||
|
|
@ -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"
|
||||
|
|
@ -190,6 +194,10 @@
|
|||
label="Owner"
|
||||
name="owner"
|
||||
width="141" />
|
||||
<scroll_list.columns
|
||||
label="Scripted"
|
||||
name="scripted"
|
||||
width="60" />
|
||||
<scroll_list.columns
|
||||
label="Impact"
|
||||
name="land_impact"
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -537,6 +537,14 @@
|
|||
layout="topleft"
|
||||
name="Landmark Separator" />
|
||||
<menu_item_call
|
||||
label="Copy SLurl"
|
||||
layout="topleft"
|
||||
name="url_copy">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.DoToSelected"
|
||||
parameter="copy_slurl" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="About Landmark"
|
||||
layout="topleft"
|
||||
name="About Landmark">
|
||||
|
|
|
|||
|
|
@ -8073,9 +8073,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."
|
||||
|
|
@ -8086,9 +8103,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"
|
||||
|
|
@ -8099,10 +8118,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 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 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.
|
||||
|
||||
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."
|
||||
|
|
@ -8111,6 +8167,25 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '
|
|||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<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"
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@
|
|||
layout="topleft"
|
||||
left_pad="155"
|
||||
name="cancel_restart_btn"
|
||||
tool_tip="Delay region restart by one hour"
|
||||
tool_tip="Cancel region restart"
|
||||
top_delta="0"
|
||||
width="150" />
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -129,6 +129,5 @@
|
|||
left_pad="5"
|
||||
top="2"
|
||||
name="volume_btn"
|
||||
tool_tip="Global Volume Control"
|
||||
width="16" />
|
||||
</panel>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue