diff options
240 files changed, 4062 insertions, 1408 deletions
diff --git a/indra/llcharacter/llanimationstates.cpp b/indra/llcharacter/llanimationstates.cpp index 365fb673f3..4c24218fc3 100644 --- a/indra/llcharacter/llanimationstates.cpp +++ b/indra/llcharacter/llanimationstates.cpp @@ -39,6 +39,146 @@ #include "llanimationstates.h" #include "llstring.h" +const LLUUID ANIM_AGENT_AFRAID = LLUUID("6b61c8e8-4747-0d75-12d7-e49ff207a4ca"); +const LLUUID ANIM_AGENT_AIM_BAZOOKA_R = LLUUID("b5b4a67d-0aee-30d2-72cd-77b333e932ef"); +const LLUUID ANIM_AGENT_AIM_BOW_L = LLUUID("46bb4359-de38-4ed8-6a22-f1f52fe8f506"); +const LLUUID ANIM_AGENT_AIM_HANDGUN_R = LLUUID("3147d815-6338-b932-f011-16b56d9ac18b"); +const LLUUID ANIM_AGENT_AIM_RIFLE_R = LLUUID("ea633413-8006-180a-c3ba-96dd1d756720"); +const LLUUID ANIM_AGENT_ANGRY = LLUUID("5747a48e-073e-c331-f6f3-7c2149613d3e"); +const LLUUID ANIM_AGENT_AWAY = LLUUID("fd037134-85d4-f241-72c6-4f42164fedee"); +const LLUUID ANIM_AGENT_BACKFLIP = LLUUID("c4ca6188-9127-4f31-0158-23c4e2f93304"); +const LLUUID ANIM_AGENT_BELLY_LAUGH = LLUUID("18b3a4b5-b463-bd48-e4b6-71eaac76c515"); +const LLUUID ANIM_AGENT_BLOW_KISS = LLUUID("db84829b-462c-ee83-1e27-9bbee66bd624"); +const LLUUID ANIM_AGENT_BORED = LLUUID("b906c4ba-703b-1940-32a3-0c7f7d791510"); +const LLUUID ANIM_AGENT_BOW = LLUUID("82e99230-c906-1403-4d9c-3889dd98daba"); +const LLUUID ANIM_AGENT_BRUSH = LLUUID("349a3801-54f9-bf2c-3bd0-1ac89772af01"); +const LLUUID ANIM_AGENT_BUSY = LLUUID("efcf670c-2d18-8128-973a-034ebc806b67"); +const LLUUID ANIM_AGENT_CLAP = LLUUID("9b0c1c4e-8ac7-7969-1494-28c874c4f668"); +const LLUUID ANIM_AGENT_COURTBOW = LLUUID("9ba1c942-08be-e43a-fb29-16ad440efc50"); +const LLUUID ANIM_AGENT_CROUCH = LLUUID("201f3fdf-cb1f-dbec-201f-7333e328ae7c"); +const LLUUID ANIM_AGENT_CROUCHWALK = LLUUID("47f5f6fb-22e5-ae44-f871-73aaaf4a6022"); +const LLUUID ANIM_AGENT_CRY = LLUUID("92624d3e-1068-f1aa-a5ec-8244585193ed"); +const LLUUID ANIM_AGENT_CUSTOMIZE = LLUUID("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"); +const LLUUID ANIM_AGENT_CUSTOMIZE_DONE = LLUUID("6883a61a-b27b-5914-a61e-dda118a9ee2c"); +const LLUUID ANIM_AGENT_DANCE1 = LLUUID("b68a3d7c-de9e-fc87-eec8-543d787e5b0d"); +const LLUUID ANIM_AGENT_DANCE2 = LLUUID("928cae18-e31d-76fd-9cc9-2f55160ff818"); +const LLUUID ANIM_AGENT_DANCE3 = LLUUID("30047778-10ea-1af7-6881-4db7a3a5a114"); +const LLUUID ANIM_AGENT_DANCE4 = LLUUID("951469f4-c7b2-c818-9dee-ad7eea8c30b7"); +const LLUUID ANIM_AGENT_DANCE5 = LLUUID("4bd69a1d-1114-a0b4-625f-84e0a5237155"); +const LLUUID ANIM_AGENT_DANCE6 = LLUUID("cd28b69b-9c95-bb78-3f94-8d605ff1bb12"); +const LLUUID ANIM_AGENT_DANCE7 = LLUUID("a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6"); +const LLUUID ANIM_AGENT_DANCE8 = LLUUID("b0dc417c-1f11-af36-2e80-7e7489fa7cdc"); +const LLUUID ANIM_AGENT_DEAD = LLUUID("57abaae6-1d17-7b1b-5f98-6d11a6411276"); +const LLUUID ANIM_AGENT_DRINK = LLUUID("0f86e355-dd31-a61c-fdb0-3a96b9aad05f"); +const LLUUID ANIM_AGENT_EMBARRASSED = LLUUID("514af488-9051-044a-b3fc-d4dbf76377c6"); +const LLUUID ANIM_AGENT_EXPRESS_AFRAID = LLUUID("aa2df84d-cf8f-7218-527b-424a52de766e"); +const LLUUID ANIM_AGENT_EXPRESS_ANGER = LLUUID("1a03b575-9634-b62a-5767-3a679e81f4de"); +const LLUUID ANIM_AGENT_EXPRESS_BORED = LLUUID("214aa6c1-ba6a-4578-f27c-ce7688f61d0d"); +const LLUUID ANIM_AGENT_EXPRESS_CRY = LLUUID("d535471b-85bf-3b4d-a542-93bea4f59d33"); +const LLUUID ANIM_AGENT_EXPRESS_DISDAIN = LLUUID("d4416ff1-09d3-300f-4183-1b68a19b9fc1"); +const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED = LLUUID("0b8c8211-d78c-33e8-fa28-c51a9594e424"); +const LLUUID ANIM_AGENT_EXPRESS_FROWN = LLUUID("fee3df48-fa3d-1015-1e26-a205810e3001"); +const LLUUID ANIM_AGENT_EXPRESS_KISS = LLUUID("1e8d90cc-a84e-e135-884c-7c82c8b03a14"); +const LLUUID ANIM_AGENT_EXPRESS_LAUGH = LLUUID("62570842-0950-96f8-341c-809e65110823"); +const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH = LLUUID("d63bc1f9-fc81-9625-a0c6-007176d82eb7"); +const LLUUID ANIM_AGENT_EXPRESS_REPULSED = LLUUID("f76cda94-41d4-a229-2872-e0296e58afe1"); +const LLUUID ANIM_AGENT_EXPRESS_SAD = LLUUID("eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7"); +const LLUUID ANIM_AGENT_EXPRESS_SHRUG = LLUUID("a351b1bc-cc94-aac2-7bea-a7e6ebad15ef"); +const LLUUID ANIM_AGENT_EXPRESS_SMILE = LLUUID("b7c7c833-e3d3-c4e3-9fc0-131237446312"); +const LLUUID ANIM_AGENT_EXPRESS_SURPRISE = LLUUID("728646d9-cc79-08b2-32d6-937f0a835c24"); +const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT = LLUUID("835965c6-7f2f-bda2-5deb-2478737f91bf"); +const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE = LLUUID("b92ec1a5-e7ce-a76b-2b05-bcdb9311417e"); +const LLUUID ANIM_AGENT_EXPRESS_WINK = LLUUID("da020525-4d94-59d6-23d7-81fdebf33148"); +const LLUUID ANIM_AGENT_EXPRESS_WORRY = LLUUID("9c05e5c7-6f07-6ca4-ed5a-b230390c3950"); +const LLUUID ANIM_AGENT_FALLDOWN = LLUUID("666307d9-a860-572d-6fd4-c3ab8865c094"); +const LLUUID ANIM_AGENT_FEMALE_RUN_NEW = LLUUID("85995026-eade-5d78-d364-94a64512cb66"); +const LLUUID ANIM_AGENT_FEMALE_WALK = LLUUID("f5fc7433-043d-e819-8298-f519a119b688"); +const LLUUID ANIM_AGENT_FEMALE_WALK_NEW = LLUUID("d60c41d2-7c24-7074-d3fa-6101cea22a51"); +const LLUUID ANIM_AGENT_FINGER_WAG = LLUUID("c1bc7f36-3ba0-d844-f93c-93be945d644f"); +const LLUUID ANIM_AGENT_FIST_PUMP = LLUUID("7db00ccd-f380-f3ee-439d-61968ec69c8a"); +const LLUUID ANIM_AGENT_FLY = LLUUID("aec4610c-757f-bc4e-c092-c6e9caf18daf"); +const LLUUID ANIM_AGENT_FLYSLOW = LLUUID("2b5a38b2-5e00-3a97-a495-4c826bc443e6"); +const LLUUID ANIM_AGENT_HELLO = LLUUID("9b29cd61-c45b-5689-ded2-91756b8d76a9"); +const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R = LLUUID("ef62d355-c815-4816-2474-b1acc21094a6"); +const LLUUID ANIM_AGENT_HOLD_BOW_L = LLUUID("8b102617-bcba-037b-86c1-b76219f90c88"); +const LLUUID ANIM_AGENT_HOLD_HANDGUN_R = LLUUID("efdc1727-8b8a-c800-4077-975fc27ee2f2"); +const LLUUID ANIM_AGENT_HOLD_RIFLE_R = LLUUID("3d94bad0-c55b-7dcc-8763-033c59405d33"); +const LLUUID ANIM_AGENT_HOLD_THROW_R = LLUUID("7570c7b5-1f22-56dd-56ef-a9168241bbb6"); +const LLUUID ANIM_AGENT_HOVER = LLUUID("4ae8016b-31b9-03bb-c401-b1ea941db41d"); +const LLUUID ANIM_AGENT_HOVER_DOWN = LLUUID("20f063ea-8306-2562-0b07-5c853b37b31e"); +const LLUUID ANIM_AGENT_HOVER_UP = LLUUID("62c5de58-cb33-5743-3d07-9e4cd4352864"); +const LLUUID ANIM_AGENT_IMPATIENT = LLUUID("5ea3991f-c293-392e-6860-91dfa01278a3"); +const LLUUID ANIM_AGENT_JUMP = LLUUID("2305bd75-1ca9-b03b-1faa-b176b8a8c49e"); +const LLUUID ANIM_AGENT_JUMP_FOR_JOY = LLUUID("709ea28e-1573-c023-8bf8-520c8bc637fa"); +const LLUUID ANIM_AGENT_KISS_MY_BUTT = LLUUID("19999406-3a3a-d58c-a2ac-d72e555dcf51"); +const LLUUID ANIM_AGENT_LAND = LLUUID("7a17b059-12b2-41b1-570a-186368b6aa6f"); +const LLUUID ANIM_AGENT_LAUGH_SHORT = LLUUID("ca5b3f14-3194-7a2b-c894-aa699b718d1f"); +const LLUUID ANIM_AGENT_MEDIUM_LAND = LLUUID("f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57"); +const LLUUID ANIM_AGENT_MOTORCYCLE_SIT = LLUUID("08464f78-3a8e-2944-cba5-0c94aff3af29"); +const LLUUID ANIM_AGENT_MUSCLE_BEACH = LLUUID("315c3a41-a5f3-0ba4-27da-f893f769e69b"); +const LLUUID ANIM_AGENT_NO = LLUUID("5a977ed9-7f72-44e9-4c4c-6e913df8ae74"); +const LLUUID ANIM_AGENT_NO_UNHAPPY = LLUUID("d83fa0e5-97ed-7eb2-e798-7bd006215cb4"); +const LLUUID ANIM_AGENT_NYAH_NYAH = LLUUID("f061723d-0a18-754f-66ee-29a44795a32f"); +const LLUUID ANIM_AGENT_ONETWO_PUNCH = LLUUID("eefc79be-daae-a239-8c04-890f5d23654a"); +const LLUUID ANIM_AGENT_PEACE = LLUUID("b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9"); +const LLUUID ANIM_AGENT_POINT_ME = LLUUID("17c024cc-eef2-f6a0-3527-9869876d7752"); +const LLUUID ANIM_AGENT_POINT_YOU = LLUUID("ec952cca-61ef-aa3b-2789-4d1344f016de"); +const LLUUID ANIM_AGENT_PRE_JUMP = LLUUID("7a4e87fe-de39-6fcb-6223-024b00893244"); +const LLUUID ANIM_AGENT_PUNCH_LEFT = LLUUID("f3300ad9-3462-1d07-2044-0fef80062da0"); +const LLUUID ANIM_AGENT_PUNCH_RIGHT = LLUUID("c8e42d32-7310-6906-c903-cab5d4a34656"); +const LLUUID ANIM_AGENT_REPULSED = LLUUID("36f81a92-f076-5893-dc4b-7c3795e487cf"); +const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK = LLUUID("49aea43b-5ac3-8a44-b595-96100af0beda"); +const LLUUID ANIM_AGENT_RPS_COUNTDOWN = LLUUID("35db4f7e-28c2-6679-cea9-3ee108f7fc7f"); +const LLUUID ANIM_AGENT_RPS_PAPER = LLUUID("0836b67f-7f7b-f37b-c00a-460dc1521f5a"); +const LLUUID ANIM_AGENT_RPS_ROCK = LLUUID("42dd95d5-0bc6-6392-f650-777304946c0f"); +const LLUUID ANIM_AGENT_RPS_SCISSORS = LLUUID("16803a9f-5140-e042-4d7b-d28ba247c325"); +const LLUUID ANIM_AGENT_RUN = LLUUID("05ddbff8-aaa9-92a1-2b74-8fe77a29b445"); +const LLUUID ANIM_AGENT_RUN_NEW = LLUUID("1ab1b236-cd08-21e6-0cbc-0d923fc6eca2"); +const LLUUID ANIM_AGENT_SAD = LLUUID("0eb702e2-cc5a-9a88-56a5-661a55c0676a"); +const LLUUID ANIM_AGENT_SALUTE = LLUUID("cd7668a6-7011-d7e2-ead8-fc69eff1a104"); +const LLUUID ANIM_AGENT_SHOOT_BOW_L = LLUUID("e04d450d-fdb5-0432-fd68-818aaf5935f8"); +const LLUUID ANIM_AGENT_SHOUT = LLUUID("6bd01860-4ebd-127a-bb3d-d1427e8e0c42"); +const LLUUID ANIM_AGENT_SHRUG = LLUUID("70ea714f-3a97-d742-1b01-590a8fcd1db5"); +const LLUUID ANIM_AGENT_SIT = LLUUID("1a5fe8ac-a804-8a5d-7cbd-56bd83184568"); +const LLUUID ANIM_AGENT_SIT_FEMALE = LLUUID("b1709c8d-ecd3-54a1-4f28-d55ac0840782"); +const LLUUID ANIM_AGENT_SIT_GENERIC = LLUUID("245f3c54-f1c0-bf2e-811f-46d8eeb386e7"); +const LLUUID ANIM_AGENT_SIT_GROUND = LLUUID("1c7600d6-661f-b87b-efe2-d7421eb93c86"); +const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED = LLUUID("1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e"); +const LLUUID ANIM_AGENT_SIT_TO_STAND = LLUUID("a8dee56f-2eae-9e7a-05a2-6fb92b97e21e"); +const LLUUID ANIM_AGENT_SLEEP = LLUUID("f2bed5f9-9d44-39af-b0cd-257b2a17fe40"); +const LLUUID ANIM_AGENT_SMOKE_IDLE = LLUUID("d2f2ee58-8ad1-06c9-d8d3-3827ba31567a"); +const LLUUID ANIM_AGENT_SMOKE_INHALE = LLUUID("6802d553-49da-0778-9f85-1599a2266526"); +const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN = LLUUID("0a9fb970-8b44-9114-d3a9-bf69cfe804d6"); +const LLUUID ANIM_AGENT_SNAPSHOT = LLUUID("eae8905b-271a-99e2-4c0e-31106afd100c"); +const LLUUID ANIM_AGENT_STAND = LLUUID("2408fe9e-df1d-1d7d-f4ff-1384fa7b350f"); +const LLUUID ANIM_AGENT_STANDUP = LLUUID("3da1d753-028a-5446-24f3-9c9b856d9422"); +const LLUUID ANIM_AGENT_STAND_1 = LLUUID("15468e00-3400-bb66-cecc-646d7c14458e"); +const LLUUID ANIM_AGENT_STAND_2 = LLUUID("370f3a20-6ca6-9971-848c-9a01bc42ae3c"); +const LLUUID ANIM_AGENT_STAND_3 = LLUUID("42b46214-4b44-79ae-deb8-0df61424ff4b"); +const LLUUID ANIM_AGENT_STAND_4 = LLUUID("f22fed8b-a5ed-2c93-64d5-bdd8b93c889f"); +const LLUUID ANIM_AGENT_STRETCH = LLUUID("80700431-74ec-a008-14f8-77575e73693f"); +const LLUUID ANIM_AGENT_STRIDE = LLUUID("1cb562b0-ba21-2202-efb3-30f82cdf9595"); +const LLUUID ANIM_AGENT_SURF = LLUUID("41426836-7437-7e89-025d-0aa4d10f1d69"); +const LLUUID ANIM_AGENT_SURPRISE = LLUUID("313b9881-4302-73c0-c7d0-0e7a36b6c224"); +const LLUUID ANIM_AGENT_SWORD_STRIKE = LLUUID("85428680-6bf9-3e64-b489-6f81087c24bd"); +const LLUUID ANIM_AGENT_TALK = LLUUID("5c682a95-6da4-a463-0bf6-0f5b7be129d1"); +const LLUUID ANIM_AGENT_TANTRUM = LLUUID("11000694-3f41-adc2-606b-eee1d66f3724"); +const LLUUID ANIM_AGENT_THROW_R = LLUUID("aa134404-7dac-7aca-2cba-435f9db875ca"); +const LLUUID ANIM_AGENT_TRYON_SHIRT = LLUUID("83ff59fe-2346-f236-9009-4e3608af64c1"); +const LLUUID ANIM_AGENT_TURNLEFT = LLUUID("56e0ba0d-4a9f-7f27-6117-32f2ebbf6135"); +const LLUUID ANIM_AGENT_TURNRIGHT = LLUUID("2d6daa51-3192-6794-8e2e-a15f8338ec30"); +const LLUUID ANIM_AGENT_TYPE = LLUUID("c541c47f-e0c0-058b-ad1a-d6ae3a4584d9"); +const LLUUID ANIM_AGENT_WALK = LLUUID("6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0"); +const LLUUID ANIM_AGENT_WALK_NEW = LLUUID("33339176-7ddc-9397-94a4-bf3403cbc8f5"); +const LLUUID ANIM_AGENT_WHISPER = LLUUID("7693f268-06c7-ea71-fa21-2b30d6533f8f"); +const LLUUID ANIM_AGENT_WHISTLE = LLUUID("b1ed7982-c68e-a982-7561-52a88a5298c0"); +const LLUUID ANIM_AGENT_WINK = LLUUID("869ecdad-a44b-671e-3266-56aef2e3ac2e"); +const LLUUID ANIM_AGENT_WINK_HOLLYWOOD = LLUUID("c0c4030f-c02b-49de-24ba-2331f43fe41c"); +const LLUUID ANIM_AGENT_WORRY = LLUUID("9f496bd2-589a-709f-16cc-69bf7df1d36c"); +const LLUUID ANIM_AGENT_YES = LLUUID("15dd911d-be82-2856-26db-27659b142875"); +const LLUUID ANIM_AGENT_YES_HAPPY = LLUUID("b8c8b2a3-9008-1771-3bfc-90924955ab2d"); +const LLUUID ANIM_AGENT_YOGA_FLOAT = LLUUID("42ecd00b-9947-a97c-400a-bbc9174c7aeb"); + LLUUID AGENT_WALK_ANIMS[] = {ANIM_AGENT_WALK, ANIM_AGENT_RUN, ANIM_AGENT_CROUCHWALK, ANIM_AGENT_TURNLEFT, ANIM_AGENT_TURNRIGHT}; S32 NUM_AGENT_WALK_ANIMS = LL_ARRAY_SIZE(AGENT_WALK_ANIMS); @@ -116,7 +256,9 @@ LLAnimationLibrary::LLAnimationLibrary() : mAnimMap[ANIM_AGENT_EXPRESS_WINK]= mAnimStringTable.addString("express_wink_emote"); mAnimMap[ANIM_AGENT_EXPRESS_WORRY]= mAnimStringTable.addString("express_worry_emote"); mAnimMap[ANIM_AGENT_FALLDOWN]= mAnimStringTable.addString("falldown"); + mAnimMap[ANIM_AGENT_FEMALE_RUN_NEW]= mAnimStringTable.addString("female_run_new"); mAnimMap[ANIM_AGENT_FEMALE_WALK]= mAnimStringTable.addString("female_walk"); + mAnimMap[ANIM_AGENT_FEMALE_WALK_NEW]= mAnimStringTable.addString("female_walk_new"); mAnimMap[ANIM_AGENT_FINGER_WAG]= mAnimStringTable.addString("angry_fingerwag"); mAnimMap[ANIM_AGENT_FIST_PUMP]= mAnimStringTable.addString("fist_pump"); mAnimMap[ANIM_AGENT_FLY]= mAnimStringTable.addString("fly"); @@ -156,6 +298,7 @@ LLAnimationLibrary::LLAnimationLibrary() : mAnimMap[ANIM_AGENT_RPS_ROCK]= mAnimStringTable.addString("rps_rock"); mAnimMap[ANIM_AGENT_RPS_SCISSORS]= mAnimStringTable.addString("rps_scissors"); mAnimMap[ANIM_AGENT_RUN]= mAnimStringTable.addString("run"); + mAnimMap[ANIM_AGENT_RUN_NEW]= mAnimStringTable.addString("run_new"); mAnimMap[ANIM_AGENT_SAD]= mAnimStringTable.addString("express_sad"); mAnimMap[ANIM_AGENT_SALUTE]= mAnimStringTable.addString("salute"); mAnimMap[ANIM_AGENT_SHOOT_BOW_L]= mAnimStringTable.addString("shoot_l_bow"); @@ -191,6 +334,7 @@ LLAnimationLibrary::LLAnimationLibrary() : mAnimMap[ANIM_AGENT_TURNRIGHT]= mAnimStringTable.addString("turnright"); mAnimMap[ANIM_AGENT_TYPE]= mAnimStringTable.addString("type"); mAnimMap[ANIM_AGENT_WALK]= mAnimStringTable.addString("walk"); + mAnimMap[ANIM_AGENT_WALK_NEW]= mAnimStringTable.addString("walk_new"); mAnimMap[ANIM_AGENT_WHISPER]= mAnimStringTable.addString("whisper"); mAnimMap[ANIM_AGENT_WHISTLE]= mAnimStringTable.addString("whistle"); mAnimMap[ANIM_AGENT_WINK]= mAnimStringTable.addString("express_wink"); @@ -260,6 +404,23 @@ LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, BOOL allo return id; } +//----------------------------------------------------------------------------- +// Associate an anim state with a name +//----------------------------------------------------------------------------- +void LLAnimationLibrary::animStateSetString( const LLUUID& state, const std::string& name) +{ + mAnimMap[state] = mAnimStringTable.addString(name); +} + +std::string LLAnimationLibrary::animationName( const LLUUID& id ) const +{ + const char *cptr = gAnimLibrary.animStateToString(id); + if (cptr) + return std::string(cptr); + else + return std::string("[") + id.asString() + std::string("]"); +} + // Animation states that the user can trigger as part of a gesture // See struct LLAnimStateEntry in header for label location information const LLAnimStateEntry gUserAnimStates[] = { @@ -337,6 +498,5 @@ const LLAnimStateEntry gUserAnimStates[] = { const S32 gUserAnimStatesCount = LL_ARRAY_SIZE(gUserAnimStates); - // End diff --git a/indra/llcharacter/llanimationstates.h b/indra/llcharacter/llanimationstates.h index 56b24d5215..59d3a7d789 100644 --- a/indra/llcharacter/llanimationstates.h +++ b/indra/llcharacter/llanimationstates.h @@ -49,142 +49,145 @@ //----------------------------------------------------------------------------- const S32 MAX_CONCURRENT_ANIMS = 16; - -const LLUUID ANIM_AGENT_AFRAID = LLUUID("6b61c8e8-4747-0d75-12d7-e49ff207a4ca"); -const LLUUID ANIM_AGENT_AIM_BAZOOKA_R = LLUUID("b5b4a67d-0aee-30d2-72cd-77b333e932ef"); -const LLUUID ANIM_AGENT_AIM_BOW_L = LLUUID("46bb4359-de38-4ed8-6a22-f1f52fe8f506"); -const LLUUID ANIM_AGENT_AIM_HANDGUN_R = LLUUID("3147d815-6338-b932-f011-16b56d9ac18b"); -const LLUUID ANIM_AGENT_AIM_RIFLE_R = LLUUID("ea633413-8006-180a-c3ba-96dd1d756720"); -const LLUUID ANIM_AGENT_ANGRY = LLUUID("5747a48e-073e-c331-f6f3-7c2149613d3e"); -const LLUUID ANIM_AGENT_AWAY = LLUUID("fd037134-85d4-f241-72c6-4f42164fedee"); -const LLUUID ANIM_AGENT_BACKFLIP = LLUUID("c4ca6188-9127-4f31-0158-23c4e2f93304"); -const LLUUID ANIM_AGENT_BELLY_LAUGH = LLUUID("18b3a4b5-b463-bd48-e4b6-71eaac76c515"); -const LLUUID ANIM_AGENT_BLOW_KISS = LLUUID("db84829b-462c-ee83-1e27-9bbee66bd624"); -const LLUUID ANIM_AGENT_BORED = LLUUID("b906c4ba-703b-1940-32a3-0c7f7d791510"); -const LLUUID ANIM_AGENT_BOW = LLUUID("82e99230-c906-1403-4d9c-3889dd98daba"); -const LLUUID ANIM_AGENT_BRUSH = LLUUID("349a3801-54f9-bf2c-3bd0-1ac89772af01"); -const LLUUID ANIM_AGENT_BUSY = LLUUID("efcf670c-2d18-8128-973a-034ebc806b67"); -const LLUUID ANIM_AGENT_CLAP = LLUUID("9b0c1c4e-8ac7-7969-1494-28c874c4f668"); -const LLUUID ANIM_AGENT_COURTBOW = LLUUID("9ba1c942-08be-e43a-fb29-16ad440efc50"); -const LLUUID ANIM_AGENT_CROUCH = LLUUID("201f3fdf-cb1f-dbec-201f-7333e328ae7c"); -const LLUUID ANIM_AGENT_CROUCHWALK = LLUUID("47f5f6fb-22e5-ae44-f871-73aaaf4a6022"); -const LLUUID ANIM_AGENT_CRY = LLUUID("92624d3e-1068-f1aa-a5ec-8244585193ed"); -const LLUUID ANIM_AGENT_CUSTOMIZE = LLUUID("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"); -const LLUUID ANIM_AGENT_CUSTOMIZE_DONE = LLUUID("6883a61a-b27b-5914-a61e-dda118a9ee2c"); -const LLUUID ANIM_AGENT_DANCE1 = LLUUID("b68a3d7c-de9e-fc87-eec8-543d787e5b0d"); -const LLUUID ANIM_AGENT_DANCE2 = LLUUID("928cae18-e31d-76fd-9cc9-2f55160ff818"); -const LLUUID ANIM_AGENT_DANCE3 = LLUUID("30047778-10ea-1af7-6881-4db7a3a5a114"); -const LLUUID ANIM_AGENT_DANCE4 = LLUUID("951469f4-c7b2-c818-9dee-ad7eea8c30b7"); -const LLUUID ANIM_AGENT_DANCE5 = LLUUID("4bd69a1d-1114-a0b4-625f-84e0a5237155"); -const LLUUID ANIM_AGENT_DANCE6 = LLUUID("cd28b69b-9c95-bb78-3f94-8d605ff1bb12"); -const LLUUID ANIM_AGENT_DANCE7 = LLUUID("a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6"); -const LLUUID ANIM_AGENT_DANCE8 = LLUUID("b0dc417c-1f11-af36-2e80-7e7489fa7cdc"); -const LLUUID ANIM_AGENT_DEAD = LLUUID("57abaae6-1d17-7b1b-5f98-6d11a6411276"); -const LLUUID ANIM_AGENT_DRINK = LLUUID("0f86e355-dd31-a61c-fdb0-3a96b9aad05f"); -const LLUUID ANIM_AGENT_EMBARRASSED = LLUUID("514af488-9051-044a-b3fc-d4dbf76377c6"); -const LLUUID ANIM_AGENT_EXPRESS_AFRAID = LLUUID("aa2df84d-cf8f-7218-527b-424a52de766e"); -const LLUUID ANIM_AGENT_EXPRESS_ANGER = LLUUID("1a03b575-9634-b62a-5767-3a679e81f4de"); -const LLUUID ANIM_AGENT_EXPRESS_BORED = LLUUID("214aa6c1-ba6a-4578-f27c-ce7688f61d0d"); -const LLUUID ANIM_AGENT_EXPRESS_CRY = LLUUID("d535471b-85bf-3b4d-a542-93bea4f59d33"); -const LLUUID ANIM_AGENT_EXPRESS_DISDAIN = LLUUID("d4416ff1-09d3-300f-4183-1b68a19b9fc1"); -const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED = LLUUID("0b8c8211-d78c-33e8-fa28-c51a9594e424"); -const LLUUID ANIM_AGENT_EXPRESS_FROWN = LLUUID("fee3df48-fa3d-1015-1e26-a205810e3001"); -const LLUUID ANIM_AGENT_EXPRESS_KISS = LLUUID("1e8d90cc-a84e-e135-884c-7c82c8b03a14"); -const LLUUID ANIM_AGENT_EXPRESS_LAUGH = LLUUID("62570842-0950-96f8-341c-809e65110823"); -const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH = LLUUID("d63bc1f9-fc81-9625-a0c6-007176d82eb7"); -const LLUUID ANIM_AGENT_EXPRESS_REPULSED = LLUUID("f76cda94-41d4-a229-2872-e0296e58afe1"); -const LLUUID ANIM_AGENT_EXPRESS_SAD = LLUUID("eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7"); -const LLUUID ANIM_AGENT_EXPRESS_SHRUG = LLUUID("a351b1bc-cc94-aac2-7bea-a7e6ebad15ef"); -const LLUUID ANIM_AGENT_EXPRESS_SMILE = LLUUID("b7c7c833-e3d3-c4e3-9fc0-131237446312"); -const LLUUID ANIM_AGENT_EXPRESS_SURPRISE = LLUUID("728646d9-cc79-08b2-32d6-937f0a835c24"); -const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT = LLUUID("835965c6-7f2f-bda2-5deb-2478737f91bf"); -const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE = LLUUID("b92ec1a5-e7ce-a76b-2b05-bcdb9311417e"); -const LLUUID ANIM_AGENT_EXPRESS_WINK = LLUUID("da020525-4d94-59d6-23d7-81fdebf33148"); -const LLUUID ANIM_AGENT_EXPRESS_WORRY = LLUUID("9c05e5c7-6f07-6ca4-ed5a-b230390c3950"); -const LLUUID ANIM_AGENT_FALLDOWN = LLUUID("666307d9-a860-572d-6fd4-c3ab8865c094"); -const LLUUID ANIM_AGENT_FEMALE_WALK = LLUUID("f5fc7433-043d-e819-8298-f519a119b688"); -const LLUUID ANIM_AGENT_FINGER_WAG = LLUUID("c1bc7f36-3ba0-d844-f93c-93be945d644f"); -const LLUUID ANIM_AGENT_FIST_PUMP = LLUUID("7db00ccd-f380-f3ee-439d-61968ec69c8a"); -const LLUUID ANIM_AGENT_FLY = LLUUID("aec4610c-757f-bc4e-c092-c6e9caf18daf"); -const LLUUID ANIM_AGENT_FLYSLOW = LLUUID("2b5a38b2-5e00-3a97-a495-4c826bc443e6"); -const LLUUID ANIM_AGENT_HELLO = LLUUID("9b29cd61-c45b-5689-ded2-91756b8d76a9"); -const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R = LLUUID("ef62d355-c815-4816-2474-b1acc21094a6"); -const LLUUID ANIM_AGENT_HOLD_BOW_L = LLUUID("8b102617-bcba-037b-86c1-b76219f90c88"); -const LLUUID ANIM_AGENT_HOLD_HANDGUN_R = LLUUID("efdc1727-8b8a-c800-4077-975fc27ee2f2"); -const LLUUID ANIM_AGENT_HOLD_RIFLE_R = LLUUID("3d94bad0-c55b-7dcc-8763-033c59405d33"); -const LLUUID ANIM_AGENT_HOLD_THROW_R = LLUUID("7570c7b5-1f22-56dd-56ef-a9168241bbb6"); -const LLUUID ANIM_AGENT_HOVER = LLUUID("4ae8016b-31b9-03bb-c401-b1ea941db41d"); -const LLUUID ANIM_AGENT_HOVER_DOWN = LLUUID("20f063ea-8306-2562-0b07-5c853b37b31e"); -const LLUUID ANIM_AGENT_HOVER_UP = LLUUID("62c5de58-cb33-5743-3d07-9e4cd4352864"); -const LLUUID ANIM_AGENT_IMPATIENT = LLUUID("5ea3991f-c293-392e-6860-91dfa01278a3"); -const LLUUID ANIM_AGENT_JUMP = LLUUID("2305bd75-1ca9-b03b-1faa-b176b8a8c49e"); -const LLUUID ANIM_AGENT_JUMP_FOR_JOY = LLUUID("709ea28e-1573-c023-8bf8-520c8bc637fa"); -const LLUUID ANIM_AGENT_KISS_MY_BUTT = LLUUID("19999406-3a3a-d58c-a2ac-d72e555dcf51"); -const LLUUID ANIM_AGENT_LAND = LLUUID("7a17b059-12b2-41b1-570a-186368b6aa6f"); -const LLUUID ANIM_AGENT_LAUGH_SHORT = LLUUID("ca5b3f14-3194-7a2b-c894-aa699b718d1f"); -const LLUUID ANIM_AGENT_MEDIUM_LAND = LLUUID("f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57"); -const LLUUID ANIM_AGENT_MOTORCYCLE_SIT = LLUUID("08464f78-3a8e-2944-cba5-0c94aff3af29"); -const LLUUID ANIM_AGENT_MUSCLE_BEACH = LLUUID("315c3a41-a5f3-0ba4-27da-f893f769e69b"); -const LLUUID ANIM_AGENT_NO = LLUUID("5a977ed9-7f72-44e9-4c4c-6e913df8ae74"); -const LLUUID ANIM_AGENT_NO_UNHAPPY = LLUUID("d83fa0e5-97ed-7eb2-e798-7bd006215cb4"); -const LLUUID ANIM_AGENT_NYAH_NYAH = LLUUID("f061723d-0a18-754f-66ee-29a44795a32f"); -const LLUUID ANIM_AGENT_ONETWO_PUNCH = LLUUID("eefc79be-daae-a239-8c04-890f5d23654a"); -const LLUUID ANIM_AGENT_PEACE = LLUUID("b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9"); -const LLUUID ANIM_AGENT_POINT_ME = LLUUID("17c024cc-eef2-f6a0-3527-9869876d7752"); -const LLUUID ANIM_AGENT_POINT_YOU = LLUUID("ec952cca-61ef-aa3b-2789-4d1344f016de"); -const LLUUID ANIM_AGENT_PRE_JUMP = LLUUID("7a4e87fe-de39-6fcb-6223-024b00893244"); -const LLUUID ANIM_AGENT_PUNCH_LEFT = LLUUID("f3300ad9-3462-1d07-2044-0fef80062da0"); -const LLUUID ANIM_AGENT_PUNCH_RIGHT = LLUUID("c8e42d32-7310-6906-c903-cab5d4a34656"); -const LLUUID ANIM_AGENT_REPULSED = LLUUID("36f81a92-f076-5893-dc4b-7c3795e487cf"); -const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK = LLUUID("49aea43b-5ac3-8a44-b595-96100af0beda"); -const LLUUID ANIM_AGENT_RPS_COUNTDOWN = LLUUID("35db4f7e-28c2-6679-cea9-3ee108f7fc7f"); -const LLUUID ANIM_AGENT_RPS_PAPER = LLUUID("0836b67f-7f7b-f37b-c00a-460dc1521f5a"); -const LLUUID ANIM_AGENT_RPS_ROCK = LLUUID("42dd95d5-0bc6-6392-f650-777304946c0f"); -const LLUUID ANIM_AGENT_RPS_SCISSORS = LLUUID("16803a9f-5140-e042-4d7b-d28ba247c325"); -const LLUUID ANIM_AGENT_RUN = LLUUID("05ddbff8-aaa9-92a1-2b74-8fe77a29b445"); -const LLUUID ANIM_AGENT_SAD = LLUUID("0eb702e2-cc5a-9a88-56a5-661a55c0676a"); -const LLUUID ANIM_AGENT_SALUTE = LLUUID("cd7668a6-7011-d7e2-ead8-fc69eff1a104"); -const LLUUID ANIM_AGENT_SHOOT_BOW_L = LLUUID("e04d450d-fdb5-0432-fd68-818aaf5935f8"); -const LLUUID ANIM_AGENT_SHOUT = LLUUID("6bd01860-4ebd-127a-bb3d-d1427e8e0c42"); -const LLUUID ANIM_AGENT_SHRUG = LLUUID("70ea714f-3a97-d742-1b01-590a8fcd1db5"); -const LLUUID ANIM_AGENT_SIT = LLUUID("1a5fe8ac-a804-8a5d-7cbd-56bd83184568"); -const LLUUID ANIM_AGENT_SIT_FEMALE = LLUUID("b1709c8d-ecd3-54a1-4f28-d55ac0840782"); -const LLUUID ANIM_AGENT_SIT_GENERIC = LLUUID("245f3c54-f1c0-bf2e-811f-46d8eeb386e7"); -const LLUUID ANIM_AGENT_SIT_GROUND = LLUUID("1c7600d6-661f-b87b-efe2-d7421eb93c86"); -const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED = LLUUID("1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e"); -const LLUUID ANIM_AGENT_SIT_TO_STAND = LLUUID("a8dee56f-2eae-9e7a-05a2-6fb92b97e21e"); -const LLUUID ANIM_AGENT_SLEEP = LLUUID("f2bed5f9-9d44-39af-b0cd-257b2a17fe40"); -const LLUUID ANIM_AGENT_SMOKE_IDLE = LLUUID("d2f2ee58-8ad1-06c9-d8d3-3827ba31567a"); -const LLUUID ANIM_AGENT_SMOKE_INHALE = LLUUID("6802d553-49da-0778-9f85-1599a2266526"); -const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN = LLUUID("0a9fb970-8b44-9114-d3a9-bf69cfe804d6"); -const LLUUID ANIM_AGENT_SNAPSHOT = LLUUID("eae8905b-271a-99e2-4c0e-31106afd100c"); -const LLUUID ANIM_AGENT_STAND = LLUUID("2408fe9e-df1d-1d7d-f4ff-1384fa7b350f"); -const LLUUID ANIM_AGENT_STANDUP = LLUUID("3da1d753-028a-5446-24f3-9c9b856d9422"); -const LLUUID ANIM_AGENT_STAND_1 = LLUUID("15468e00-3400-bb66-cecc-646d7c14458e"); -const LLUUID ANIM_AGENT_STAND_2 = LLUUID("370f3a20-6ca6-9971-848c-9a01bc42ae3c"); -const LLUUID ANIM_AGENT_STAND_3 = LLUUID("42b46214-4b44-79ae-deb8-0df61424ff4b"); -const LLUUID ANIM_AGENT_STAND_4 = LLUUID("f22fed8b-a5ed-2c93-64d5-bdd8b93c889f"); -const LLUUID ANIM_AGENT_STRETCH = LLUUID("80700431-74ec-a008-14f8-77575e73693f"); -const LLUUID ANIM_AGENT_STRIDE = LLUUID("1cb562b0-ba21-2202-efb3-30f82cdf9595"); -const LLUUID ANIM_AGENT_SURF = LLUUID("41426836-7437-7e89-025d-0aa4d10f1d69"); -const LLUUID ANIM_AGENT_SURPRISE = LLUUID("313b9881-4302-73c0-c7d0-0e7a36b6c224"); -const LLUUID ANIM_AGENT_SWORD_STRIKE = LLUUID("85428680-6bf9-3e64-b489-6f81087c24bd"); -const LLUUID ANIM_AGENT_TALK = LLUUID("5c682a95-6da4-a463-0bf6-0f5b7be129d1"); -const LLUUID ANIM_AGENT_TANTRUM = LLUUID("11000694-3f41-adc2-606b-eee1d66f3724"); -const LLUUID ANIM_AGENT_THROW_R = LLUUID("aa134404-7dac-7aca-2cba-435f9db875ca"); -const LLUUID ANIM_AGENT_TRYON_SHIRT = LLUUID("83ff59fe-2346-f236-9009-4e3608af64c1"); -const LLUUID ANIM_AGENT_TURNLEFT = LLUUID("56e0ba0d-4a9f-7f27-6117-32f2ebbf6135"); -const LLUUID ANIM_AGENT_TURNRIGHT = LLUUID("2d6daa51-3192-6794-8e2e-a15f8338ec30"); -const LLUUID ANIM_AGENT_TYPE = LLUUID("c541c47f-e0c0-058b-ad1a-d6ae3a4584d9"); -const LLUUID ANIM_AGENT_WALK = LLUUID("6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0"); -const LLUUID ANIM_AGENT_WHISPER = LLUUID("7693f268-06c7-ea71-fa21-2b30d6533f8f"); -const LLUUID ANIM_AGENT_WHISTLE = LLUUID("b1ed7982-c68e-a982-7561-52a88a5298c0"); -const LLUUID ANIM_AGENT_WINK = LLUUID("869ecdad-a44b-671e-3266-56aef2e3ac2e"); -const LLUUID ANIM_AGENT_WINK_HOLLYWOOD = LLUUID("c0c4030f-c02b-49de-24ba-2331f43fe41c"); -const LLUUID ANIM_AGENT_WORRY = LLUUID("9f496bd2-589a-709f-16cc-69bf7df1d36c"); -const LLUUID ANIM_AGENT_YES = LLUUID("15dd911d-be82-2856-26db-27659b142875"); -const LLUUID ANIM_AGENT_YES_HAPPY = LLUUID("b8c8b2a3-9008-1771-3bfc-90924955ab2d"); -const LLUUID ANIM_AGENT_YOGA_FLOAT = LLUUID("42ecd00b-9947-a97c-400a-bbc9174c7aeb"); +extern const LLUUID ANIM_AGENT_AFRAID; +extern const LLUUID ANIM_AGENT_AIM_BAZOOKA_R; +extern const LLUUID ANIM_AGENT_AIM_BOW_L; +extern const LLUUID ANIM_AGENT_AIM_HANDGUN_R; +extern const LLUUID ANIM_AGENT_AIM_RIFLE_R; +extern const LLUUID ANIM_AGENT_ANGRY; +extern const LLUUID ANIM_AGENT_AWAY; +extern const LLUUID ANIM_AGENT_BACKFLIP; +extern const LLUUID ANIM_AGENT_BELLY_LAUGH; +extern const LLUUID ANIM_AGENT_BLOW_KISS; +extern const LLUUID ANIM_AGENT_BORED; +extern const LLUUID ANIM_AGENT_BOW; +extern const LLUUID ANIM_AGENT_BRUSH; +extern const LLUUID ANIM_AGENT_BUSY; +extern const LLUUID ANIM_AGENT_CLAP; +extern const LLUUID ANIM_AGENT_COURTBOW; +extern const LLUUID ANIM_AGENT_CROUCH; +extern const LLUUID ANIM_AGENT_CROUCHWALK; +extern const LLUUID ANIM_AGENT_CRY; +extern const LLUUID ANIM_AGENT_CUSTOMIZE; +extern const LLUUID ANIM_AGENT_CUSTOMIZE_DONE; +extern const LLUUID ANIM_AGENT_DANCE1; +extern const LLUUID ANIM_AGENT_DANCE2; +extern const LLUUID ANIM_AGENT_DANCE3; +extern const LLUUID ANIM_AGENT_DANCE4; +extern const LLUUID ANIM_AGENT_DANCE5; +extern const LLUUID ANIM_AGENT_DANCE6; +extern const LLUUID ANIM_AGENT_DANCE7; +extern const LLUUID ANIM_AGENT_DANCE8; +extern const LLUUID ANIM_AGENT_DEAD; +extern const LLUUID ANIM_AGENT_DRINK; +extern const LLUUID ANIM_AGENT_EMBARRASSED; +extern const LLUUID ANIM_AGENT_EXPRESS_AFRAID; +extern const LLUUID ANIM_AGENT_EXPRESS_ANGER; +extern const LLUUID ANIM_AGENT_EXPRESS_BORED; +extern const LLUUID ANIM_AGENT_EXPRESS_CRY; +extern const LLUUID ANIM_AGENT_EXPRESS_DISDAIN; +extern const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED; +extern const LLUUID ANIM_AGENT_EXPRESS_FROWN; +extern const LLUUID ANIM_AGENT_EXPRESS_KISS; +extern const LLUUID ANIM_AGENT_EXPRESS_LAUGH; +extern const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH; +extern const LLUUID ANIM_AGENT_EXPRESS_REPULSED; +extern const LLUUID ANIM_AGENT_EXPRESS_SAD; +extern const LLUUID ANIM_AGENT_EXPRESS_SHRUG; +extern const LLUUID ANIM_AGENT_EXPRESS_SMILE; +extern const LLUUID ANIM_AGENT_EXPRESS_SURPRISE; +extern const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT; +extern const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE; +extern const LLUUID ANIM_AGENT_EXPRESS_WINK; +extern const LLUUID ANIM_AGENT_EXPRESS_WORRY; +extern const LLUUID ANIM_AGENT_FALLDOWN; +extern const LLUUID ANIM_AGENT_FEMALE_RUN_NEW; +extern const LLUUID ANIM_AGENT_FEMALE_WALK; +extern const LLUUID ANIM_AGENT_FEMALE_WALK_NEW; +extern const LLUUID ANIM_AGENT_FINGER_WAG; +extern const LLUUID ANIM_AGENT_FIST_PUMP; +extern const LLUUID ANIM_AGENT_FLY; +extern const LLUUID ANIM_AGENT_FLYSLOW; +extern const LLUUID ANIM_AGENT_HELLO; +extern const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R; +extern const LLUUID ANIM_AGENT_HOLD_BOW_L; +extern const LLUUID ANIM_AGENT_HOLD_HANDGUN_R; +extern const LLUUID ANIM_AGENT_HOLD_RIFLE_R; +extern const LLUUID ANIM_AGENT_HOLD_THROW_R; +extern const LLUUID ANIM_AGENT_HOVER; +extern const LLUUID ANIM_AGENT_HOVER_DOWN; +extern const LLUUID ANIM_AGENT_HOVER_UP; +extern const LLUUID ANIM_AGENT_IMPATIENT; +extern const LLUUID ANIM_AGENT_JUMP; +extern const LLUUID ANIM_AGENT_JUMP_FOR_JOY; +extern const LLUUID ANIM_AGENT_KISS_MY_BUTT; +extern const LLUUID ANIM_AGENT_LAND; +extern const LLUUID ANIM_AGENT_LAUGH_SHORT; +extern const LLUUID ANIM_AGENT_MEDIUM_LAND; +extern const LLUUID ANIM_AGENT_MOTORCYCLE_SIT; +extern const LLUUID ANIM_AGENT_MUSCLE_BEACH; +extern const LLUUID ANIM_AGENT_NO; +extern const LLUUID ANIM_AGENT_NO_UNHAPPY; +extern const LLUUID ANIM_AGENT_NYAH_NYAH; +extern const LLUUID ANIM_AGENT_ONETWO_PUNCH; +extern const LLUUID ANIM_AGENT_PEACE; +extern const LLUUID ANIM_AGENT_POINT_ME; +extern const LLUUID ANIM_AGENT_POINT_YOU; +extern const LLUUID ANIM_AGENT_PRE_JUMP; +extern const LLUUID ANIM_AGENT_PUNCH_LEFT; +extern const LLUUID ANIM_AGENT_PUNCH_RIGHT; +extern const LLUUID ANIM_AGENT_REPULSED; +extern const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK; +extern const LLUUID ANIM_AGENT_RPS_COUNTDOWN; +extern const LLUUID ANIM_AGENT_RPS_PAPER; +extern const LLUUID ANIM_AGENT_RPS_ROCK; +extern const LLUUID ANIM_AGENT_RPS_SCISSORS; +extern const LLUUID ANIM_AGENT_RUN; +extern const LLUUID ANIM_AGENT_RUN_NEW; +extern const LLUUID ANIM_AGENT_SAD; +extern const LLUUID ANIM_AGENT_SALUTE; +extern const LLUUID ANIM_AGENT_SHOOT_BOW_L; +extern const LLUUID ANIM_AGENT_SHOUT; +extern const LLUUID ANIM_AGENT_SHRUG; +extern const LLUUID ANIM_AGENT_SIT; +extern const LLUUID ANIM_AGENT_SIT_FEMALE; +extern const LLUUID ANIM_AGENT_SIT_GENERIC; +extern const LLUUID ANIM_AGENT_SIT_GROUND; +extern const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED; +extern const LLUUID ANIM_AGENT_SIT_TO_STAND; +extern const LLUUID ANIM_AGENT_SLEEP; +extern const LLUUID ANIM_AGENT_SMOKE_IDLE; +extern const LLUUID ANIM_AGENT_SMOKE_INHALE; +extern const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN; +extern const LLUUID ANIM_AGENT_SNAPSHOT; +extern const LLUUID ANIM_AGENT_STAND; +extern const LLUUID ANIM_AGENT_STANDUP; +extern const LLUUID ANIM_AGENT_STAND_1; +extern const LLUUID ANIM_AGENT_STAND_2; +extern const LLUUID ANIM_AGENT_STAND_3; +extern const LLUUID ANIM_AGENT_STAND_4; +extern const LLUUID ANIM_AGENT_STRETCH; +extern const LLUUID ANIM_AGENT_STRIDE; +extern const LLUUID ANIM_AGENT_SURF; +extern const LLUUID ANIM_AGENT_SURPRISE; +extern const LLUUID ANIM_AGENT_SWORD_STRIKE; +extern const LLUUID ANIM_AGENT_TALK; +extern const LLUUID ANIM_AGENT_TANTRUM; +extern const LLUUID ANIM_AGENT_THROW_R; +extern const LLUUID ANIM_AGENT_TRYON_SHIRT; +extern const LLUUID ANIM_AGENT_TURNLEFT; +extern const LLUUID ANIM_AGENT_TURNRIGHT; +extern const LLUUID ANIM_AGENT_TYPE; +extern const LLUUID ANIM_AGENT_WALK; +extern const LLUUID ANIM_AGENT_WALK_NEW; +extern const LLUUID ANIM_AGENT_WHISPER; +extern const LLUUID ANIM_AGENT_WHISTLE; +extern const LLUUID ANIM_AGENT_WINK; +extern const LLUUID ANIM_AGENT_WINK_HOLLYWOOD; +extern const LLUUID ANIM_AGENT_WORRY; +extern const LLUUID ANIM_AGENT_YES; +extern const LLUUID ANIM_AGENT_YES_HAPPY; +extern const LLUUID ANIM_AGENT_YOGA_FLOAT; extern LLUUID AGENT_WALK_ANIMS[]; extern S32 NUM_AGENT_WALK_ANIMS; @@ -224,6 +227,16 @@ public: // Retun NULL if the name is invalid. //----------------------------------------------------------------------------- LLUUID stringToAnimState( const std::string& name, BOOL allow_ids = TRUE ); + + //----------------------------------------------------------------------------- + // Associate an anim state with a name + //----------------------------------------------------------------------------- + void animStateSetString( const LLUUID& state, const std::string& name); + + //----------------------------------------------------------------------------- + // Find the name for a given animation, or UUID string if none defined. + //----------------------------------------------------------------------------- + std::string animationName( const LLUUID& id ) const; }; struct LLAnimStateEntry @@ -249,7 +262,6 @@ extern const LLAnimStateEntry gUserAnimStates[]; extern const S32 gUserAnimStatesCount; extern LLAnimationLibrary gAnimLibrary; - #endif // LL_LLANIMATIONSTATES_H diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp index 461309bee9..f814618fc1 100644 --- a/indra/llcharacter/llkeyframewalkmotion.cpp +++ b/indra/llcharacter/llkeyframewalkmotion.cpp @@ -48,8 +48,10 @@ const F32 MAX_WALK_PLAYBACK_SPEED = 8.f; // max m/s for which we adjust walk cyc const F32 MIN_WALK_SPEED = 0.1f; // minimum speed at which we use velocity for down foot detection const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation -const F32 SPEED_ADJUST_MAX = 2.5f; // maximum adjustment of walk animation playback speed -const F32 SPEED_ADJUST_MAX_SEC = 3.f; // maximum adjustment to walk animation playback speed for a second +F32 SPEED_ADJUST_MAX = 2.5f; // maximum adjustment of walk animation playback speed +F32 SPEED_ADJUST_MAX_SEC = 3.f; // maximum adjustment to walk animation playback speed for a second +F32 ANIM_SPEED_MAX = 10.0f; // absolute upper limit on animation speed +F32 ANIM_SPEED_MIN = 0.0f; // absolute lower limit on animation speed const F32 DRIFT_COMP_MAX_TOTAL = 0.07f;//0.55f; // maximum drift compensation overall, in any direction const F32 DRIFT_COMP_MAX_SPEED = 4.f; // speed at which drift compensation total maxes out const F32 MAX_ROLL = 0.6f; @@ -300,6 +302,7 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask) // and if we're moving backward, we walk backward F32 directional_factor = localVel.mV[VX] * mRelativeDir; + if (speed > 0.1f) { // calculate ratio of desired foot velocity to detected foot velocity @@ -318,16 +321,36 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask) } mAnimSpeed = (mAvgSpeed + mSpeedAdjust) * mRelativeDir; -// char debug_text[64]; -// sprintf(debug_text, "Foot slip vel: %.2f", footSlipVelocity); -// mCharacter->addDebugText(debug_text); -// sprintf(debug_text, "Speed: %.2f", mAvgSpeed); -// mCharacter->addDebugText(debug_text); -// sprintf(debug_text, "Speed Adjust: %.2f", mSpeedAdjust); -// mCharacter->addDebugText(debug_text); -// sprintf(debug_text, "Animation Playback Speed: %.2f", mAnimSpeed); -// mCharacter->addDebugText(debug_text); - mCharacter->setAnimationData("Walk Speed", &mAnimSpeed); + if (mAnimSpeed>0) + { + mAnimSpeed = llclamp(mAnimSpeed, ANIM_SPEED_MIN, ANIM_SPEED_MAX); + } + else + { + mAnimSpeed = llclamp(mAnimSpeed, -ANIM_SPEED_MAX, -ANIM_SPEED_MIN); + } +// char debug_text[64]; +// sprintf(debug_text, "Foot slip vel: %.2f", footSlipVelocity); +// mCharacter->addDebugText(debug_text); +// sprintf(debug_text, "Speed: %.2f", mAvgSpeed); +// mCharacter->addDebugText(debug_text); +// sprintf(debug_text, "Speed Adjust: %.2f", mSpeedAdjust); +// mCharacter->addDebugText(debug_text); +// sprintf(debug_text, "Animation Playback Speed: %.2f", mAnimSpeed); +// mCharacter->addDebugText(debug_text); + mCharacter->setAnimationData("Walk Speed", &mAnimSpeed); + if (mCharacter->getMotionController().mIsSelf) + { +// F32 elapsed = mCharacter->getMotionController().getFrameTimer().getElapsedTimeF32(); +// llinfos << "PLOT elapsed: " << elapsed +// << " footSlipVelocity: " << footSlipVelocity +// << " mAvgCorrection: " << mAvgCorrection +// << " mAvgSpeed: " << mAvgSpeed +// << " mAnimSpeed: " << mAnimSpeed +// << " ANIM_SPEED_MAX: " << ANIM_SPEED_MAX +// << " ANIM_SPEED_MIN: " << ANIM_SPEED_MIN +// << llendl; + } // clamp pelvis offset to a 90 degree arc behind the nominal position F32 drift_comp_max = llclamp(speed, 0.f, DRIFT_COMP_MAX_SPEED) / DRIFT_COMP_MAX_SPEED; diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp index bb9625b2bd..78d9398c1d 100644 --- a/indra/llcharacter/llmotioncontroller.cpp +++ b/indra/llcharacter/llmotioncontroller.cpp @@ -143,7 +143,8 @@ LLMotionController::LLMotionController() mPauseTime(0.f), mTimeStep(0.f), mTimeStepCount(0), - mLastInterp(0.f) + mLastInterp(0.f), + mIsSelf(FALSE) { } @@ -446,6 +447,7 @@ BOOL LLMotionController::stopMotionInstance(LLMotion* motion, BOOL stop_immediat return FALSE; } + // If on active list, stop it if (isMotionActive(motion) && !motion->isStopped()) { @@ -1033,6 +1035,31 @@ LLMotion* LLMotionController::findMotion(const LLUUID& id) const } //----------------------------------------------------------------------------- +// dumpMotions() +//----------------------------------------------------------------------------- +void LLMotionController::dumpMotions() +{ + llinfos << "=====================================" << llendl; + for (motion_map_t::iterator iter = mAllMotions.begin(); + iter != mAllMotions.end(); iter++) + { + LLUUID id = iter->first; + std::string state_string; + LLMotion *motion = iter->second; + if (mLoadingMotions.find(motion) != mLoadingMotions.end()) + state_string += std::string("l"); + if (mLoadedMotions.find(motion) != mLoadedMotions.end()) + state_string += std::string("L"); + if (std::find(mActiveMotions.begin(), mActiveMotions.end(), motion)!=mActiveMotions.end()) + state_string += std::string("A"); + if (mDeprecatedMotions.find(motion) != mDeprecatedMotions.end()) + state_string += std::string("D"); + llinfos << gAnimLibrary.animationName(id) << " " << state_string << llendl; + + } +} + +//----------------------------------------------------------------------------- // deactivateAllMotions() //----------------------------------------------------------------------------- void LLMotionController::deactivateAllMotions() diff --git a/indra/llcharacter/llmotioncontroller.h b/indra/llcharacter/llmotioncontroller.h index 5c3ec223cb..f8bf5ac289 100644 --- a/indra/llcharacter/llmotioncontroller.h +++ b/indra/llcharacter/llmotioncontroller.h @@ -92,6 +92,7 @@ class LLMotionController public: typedef std::list<LLMotion*> motion_list_t; typedef std::set<LLMotion*> motion_set_t; + BOOL mIsSelf; public: // Constructor @@ -169,6 +170,10 @@ public: bool isMotionLoading( LLMotion *motion ); LLMotion *findMotion( const LLUUID& id ) const; + void dumpMotions(); + + const LLFrameTimer& getFrameTimer() { return mTimer; } + protected: // internal operations act on motion instances directly // as there can be duplicate motions per id during blending overlap diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp index bf0ed97143..970b6747f7 100644 --- a/indra/llmessage/llassetstorage.cpp +++ b/indra/llmessage/llassetstorage.cpp @@ -440,6 +440,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL if (mShutDown) { + llinfos << "ASSET_TRACE cancelled " << uuid << " type " << LLAssetType::lookup(type) << " shutting down" << llendl; return; // don't get the asset or do any callbacks, we are shutting down } @@ -456,6 +457,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL // Try static VFS first. if (findInStaticVFSAndInvokeCallback(uuid,type,callback,user_data)) { + llinfos << "ASSET_TRACE asset " << uuid << " found in static VFS" << llendl; return; } @@ -472,6 +474,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL { callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); } + + llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl; } else { @@ -512,7 +516,6 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL // This can be overridden by subclasses _queueDataRequest(uuid, type, callback, user_data, duplicate, is_priority); } - llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl; } diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 390ec234d3..78a6ab1eaa 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1116,8 +1116,19 @@ void LLTextBase::reflow() updateSegments(); + S32 reflow_count = 0; while(mReflowIndex < S32_MAX) { + // we can get into an infinite loop if the document height does not monotonically increase + // with decreasing width (embedded ui elements with alternate layouts). In that case, + // we want to stop reflowing after 2 iterations. We use 2, since we need to handle the case + // of introducing a vertical scrollbar causing a reflow with less width. We should also always + // use an even number of iterations to avoid user visible oscillation of the layout + if(++reflow_count > 2) + { + lldebugs << "Breaking out of reflow due to possible infinite loop in " << getName() << llendl; + break; + } S32 start_index = mReflowIndex; mReflowIndex = S32_MAX; diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index c091686ffb..bd56da9121 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1319,8 +1319,6 @@ void LLView::drawChildren() if (viewp->getVisible() && viewp->getRect().isValid()) { - // check for bad data - llassert_always(viewp->getVisible() == TRUE); // Only draw views that are within the root view localRectToScreen(viewp->getRect(),&screenRect); if ( rootRect.overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect)) diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp index 2ead5a4a57..8d6aa405e2 100644 --- a/indra/llxuixml/llinitparam.cpp +++ b/indra/llxuixml/llinitparam.cpp @@ -139,7 +139,7 @@ namespace LLInitParam bool BaseBlock::validateBlock(bool emit_errors) const { - const BlockDescriptor& block_data = getBlockDescriptor(); + const BlockDescriptor& block_data = mostDerivedBlockDescriptor(); for (BlockDescriptor::param_validation_list_t::const_iterator it = block_data.mValidationList.begin(); it != block_data.mValidationList.end(); ++it) { const Param* param = getParamFromHandle(it->first); @@ -159,7 +159,7 @@ namespace LLInitParam { // named param is one like LLView::Params::follows // unnamed param is like LLView::Params::rect - implicit - const BlockDescriptor& block_data = getBlockDescriptor(); + const BlockDescriptor& block_data = mostDerivedBlockDescriptor(); for (BlockDescriptor::param_list_t::const_iterator it = block_data.mUnnamedParams.begin(); it != block_data.mUnnamedParams.end(); @@ -230,7 +230,7 @@ namespace LLInitParam { // named param is one like LLView::Params::follows // unnamed param is like LLView::Params::rect - implicit - const BlockDescriptor& block_data = getBlockDescriptor(); + const BlockDescriptor& block_data = mostDerivedBlockDescriptor(); for (BlockDescriptor::param_list_t::const_iterator it = block_data.mUnnamedParams.begin(); it != block_data.mUnnamedParams.end(); @@ -301,7 +301,7 @@ namespace LLInitParam bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack) { - BlockDescriptor& block_data = getBlockDescriptor(); + BlockDescriptor& block_data = mostDerivedBlockDescriptor(); bool names_left = name_stack.first != name_stack.second; if (names_left) @@ -386,7 +386,7 @@ namespace LLInitParam void BaseBlock::addSynonym(Param& param, const std::string& synonym) { - BlockDescriptor& block_data = getBlockDescriptor(); + BlockDescriptor& block_data = mostDerivedBlockDescriptor(); if (block_data.mInitializationState == BlockDescriptor::INITIALIZING) { param_handle_t handle = getHandleFromParam(¶m); @@ -417,8 +417,8 @@ namespace LLInitParam { if (user_provided) { - mChangeVersion++; - } + mChangeVersion++; + } } const std::string& BaseBlock::getParamName(const BlockDescriptor& block_data, const Param* paramp) const @@ -445,7 +445,7 @@ namespace LLInitParam ParamDescriptor* BaseBlock::findParamDescriptor(param_handle_t handle) { - BlockDescriptor& descriptor = getBlockDescriptor(); + BlockDescriptor& descriptor = mostDerivedBlockDescriptor(); BlockDescriptor::all_params_list_t::iterator end_it = descriptor.mAllParams.end(); for (BlockDescriptor::all_params_list_t::iterator it = descriptor.mAllParams.begin(); it != end_it; @@ -460,7 +460,7 @@ namespace LLInitParam // NOTE: this requires that "other" is of the same derived type as this bool BaseBlock::merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { - bool param_changed = false; + bool some_param_changed = false; BlockDescriptor::all_params_list_t::const_iterator end_it = block_data.mAllParams.end(); for (BlockDescriptor::all_params_list_t::const_iterator it = block_data.mAllParams.begin(); it != end_it; @@ -471,10 +471,10 @@ namespace LLInitParam if (merge_func) { Param* paramp = getParamFromHandle(it->mParamHandle); - param_changed |= merge_func(*paramp, *other_paramp, overwrite); + some_param_changed |= merge_func(*paramp, *other_paramp, overwrite); } } - return param_changed; + return some_param_changed; } bool ParamCompare<LLSD, false>::equals(const LLSD &a, const LLSD &b) diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index c9c1d4af90..b645c4be7c 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -477,10 +477,10 @@ namespace LLInitParam bool deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack); bool serializeBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const; - virtual bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t()) const; + bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t()) const; - const BlockDescriptor& getBlockDescriptor() const { return *mBlockDescriptor; } - BlockDescriptor& getBlockDescriptor() { return *mBlockDescriptor; } + const BlockDescriptor& mostDerivedBlockDescriptor() const { return *mBlockDescriptor; } + BlockDescriptor& mostDerivedBlockDescriptor() { return *mBlockDescriptor; } // take all provided params from other and apply to self bool overwriteFrom(const BaseBlock& other) @@ -507,7 +507,7 @@ namespace LLInitParam BlockDescriptor* mBlockDescriptor; // most derived block descriptor - static BlockDescriptor& blockDescriptor() + static BlockDescriptor& selfBlockDescriptor() { static BlockDescriptor sBlockDescriptor; return sBlockDescriptor; @@ -559,7 +559,7 @@ namespace LLInitParam TypedParam(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count) : Param(block_descriptor.mCurrentBlockPtr) { - if (block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING) + if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING)) { ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this), &mergeWith, @@ -584,6 +584,7 @@ namespace LLInitParam { if (parser.readValue<T>(typed_param.mData.mValue)) { + typed_param.mData.clearKey(); typed_param.setProvided(true); typed_param.enclosingBlock().setLastChangedParam(param, true); return true; @@ -690,7 +691,7 @@ namespace LLInitParam && (overwrite || !dst_typed_param.isProvided())) { dst_typed_param.mData.clearKey(); - dst_typed_param = src_typed_param; + dst_typed_param.set(src_typed_param.get()); return true; } return false; @@ -722,7 +723,7 @@ namespace LLInitParam : Param(block_descriptor.mCurrentBlockPtr), T(value) { - if (block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING) + if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING)) { ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this), &mergeWith, @@ -741,6 +742,7 @@ namespace LLInitParam // attempt to parse block... if(typed_param.deserializeBlock(parser, name_stack)) { + typed_param.mData.clearKey(); typed_param.enclosingBlock().setLastChangedParam(param, true); return true; } @@ -856,21 +858,10 @@ namespace LLInitParam { const self_t& src_typed_param = static_cast<const self_t&>(src); self_t& dst_typed_param = static_cast<self_t&>(dst); - if (overwrite) - { - if (dst_typed_param.T::overwriteFrom(src_typed_param)) - { - dst_typed_param.mData.clearKey(); - return true; - } - } - else + if (dst_typed_param.T::merge(T::selfBlockDescriptor(), src_typed_param, overwrite || !dst_typed_param.isProvided())) { - if (dst_typed_param.T::fillFrom(src_typed_param)) - { - dst_typed_param.mData.clearKey(); - return true; - } + dst_typed_param.mData.clearKey(); + return true; } return false; } @@ -911,7 +902,7 @@ namespace LLInitParam mValues(value) { mCachedKeys.resize(mValues.size()); - if (block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING) + if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING)) { ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this), &mergeWith, @@ -1060,9 +1051,9 @@ namespace LLInitParam self_t& dst_typed_param = static_cast<self_t&>(dst); if (src_typed_param.isProvided() - && (overwrite || !isProvided())) + && (overwrite || !dst_typed_param.isProvided())) { - dst_typed_param = src_typed_param; + dst_typed_param.set(src_typed_param.get()); return true; } return false; @@ -1094,7 +1085,7 @@ namespace LLInitParam mLastParamGeneration(0) { mCachedKeys.resize(mValues.size()); - if (block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING) + if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING)) { ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this), &mergeWith, @@ -1252,7 +1243,7 @@ namespace LLInitParam if (src_typed_param.isProvided() && (overwrite || !dst_typed_param.isProvided())) { - dst_typed_param = src_typed_param; + dst_typed_param.set(src_typed_param.get()); return true; } return false; @@ -1282,13 +1273,24 @@ namespace LLInitParam // take all provided params from other and apply to self bool overwriteFrom(const self_t& other) { - mCurChoice = other.mCurChoice; - return BaseBlock::merge(blockDescriptor(), other, true); + return merge(selfBlockDescriptor(), other, true); } // take all provided params that are not already provided, and apply to self bool fillFrom(const self_t& other) { + return merge(selfBlockDescriptor(), other, false); + } + + // merge with other block + bool merge(BlockDescriptor& block_data, const self_t& other, bool overwrite) + { + // only merge a choice if we are overwriting with other's contents + if (overwrite) + { + mCurChoice = other.mCurChoice; + return BaseBlock::merge(selfBlockDescriptor(), other, overwrite); + } return false; } @@ -1314,7 +1316,7 @@ namespace LLInitParam Choice() : mCurChoice(0) { - BaseBlock::init(blockDescriptor(), BaseBlock::blockDescriptor(), sizeof(DERIVED_BLOCK)); + BaseBlock::init(selfBlockDescriptor(), BaseBlock::selfBlockDescriptor(), sizeof(DERIVED_BLOCK)); } // Alternatives are mutually exclusive wrt other Alternatives in the same block. @@ -1331,13 +1333,14 @@ namespace LLInitParam typedef typename super_t::value_assignment_t value_assignment_t; explicit Alternative(const char* name, value_assignment_t val = DefaultInitializer<T>::get()) - : super_t(DERIVED_BLOCK::blockDescriptor(), name, val, NULL, 0, 1), + : super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, NULL, 0, 1), mOriginalValue(val) { // assign initial choice to first declared option - DERIVED_BLOCK* blockp = ((DERIVED_BLOCK*)DERIVED_BLOCK::blockDescriptor().mCurrentBlockPtr); - if (DERIVED_BLOCK::blockDescriptor().mInitializationState == BlockDescriptor::INITIALIZING - && blockp->mCurChoice == 0) + DERIVED_BLOCK* blockp = ((DERIVED_BLOCK*)DERIVED_BLOCK::selfBlockDescriptor().mCurrentBlockPtr); + if (LL_UNLIKELY( + DERIVED_BLOCK::selfBlockDescriptor().mInitializationState == BlockDescriptor::INITIALIZING + && blockp->mCurChoice == 0)) { blockp->mCurChoice = Param::enclosingBlock().getHandleFromParam(this); } @@ -1382,7 +1385,7 @@ namespace LLInitParam }; protected: - static BlockDescriptor& blockDescriptor() + static BlockDescriptor& selfBlockDescriptor() { static BlockDescriptor sBlockDescriptor; return sBlockDescriptor; @@ -1410,19 +1413,19 @@ namespace LLInitParam // take all provided params from other and apply to self bool overwriteFrom(const self_t& other) { - return BaseBlock::merge(blockDescriptor(), other, true); + return BaseBlock::merge(selfBlockDescriptor(), other, true); } // take all provided params that are not already provided, and apply to self bool fillFrom(const self_t& other) { - return BaseBlock::merge(blockDescriptor(), other, false); + return BaseBlock::merge(selfBlockDescriptor(), other, false); } protected: Block() { //#pragma message("Parsing LLInitParam::Block") - BaseBlock::init(blockDescriptor(), BASE_BLOCK::blockDescriptor(), sizeof(DERIVED_BLOCK)); + BaseBlock::init(selfBlockDescriptor(), BASE_BLOCK::selfBlockDescriptor(), sizeof(DERIVED_BLOCK)); } // @@ -1436,7 +1439,7 @@ namespace LLInitParam typedef typename super_t::value_assignment_t value_assignment_t; explicit Optional(const char* name = "", value_assignment_t val = DefaultInitializer<T>::get()) - : super_t(DERIVED_BLOCK::blockDescriptor(), name, val, NULL, 0, 1) + : super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, NULL, 0, 1) { //#pragma message("Parsing LLInitParam::Block::Optional") } @@ -1465,7 +1468,7 @@ namespace LLInitParam // mandatory parameters require a name to be parseable explicit Mandatory(const char* name = "", value_assignment_t val = DefaultInitializer<T>::get()) - : super_t(DERIVED_BLOCK::blockDescriptor(), name, val, &validate, 1, 1) + : super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, &validate, 1, 1) {} Mandatory& operator=(value_assignment_t val) @@ -1501,7 +1504,7 @@ namespace LLInitParam typedef typename container_t::const_iterator const_iterator; explicit Multiple(const char* name = "", value_assignment_t val = DefaultInitializer<container_t>::get()) - : super_t(DERIVED_BLOCK::blockDescriptor(), name, val, &validate, RANGE::minCount(), RANGE::maxCount()) + : super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, &validate, RANGE::minCount(), RANGE::maxCount()) {} using super_t::operator(); @@ -1529,10 +1532,10 @@ namespace LLInitParam { public: explicit Deprecated(const char* name) - : Param(DERIVED_BLOCK::blockDescriptor().mCurrentBlockPtr) + : Param(DERIVED_BLOCK::selfBlockDescriptor().mCurrentBlockPtr) { - BlockDescriptor& block_descriptor = DERIVED_BLOCK::blockDescriptor(); - if (block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING) + BlockDescriptor& block_descriptor = DERIVED_BLOCK::selfBlockDescriptor(); + if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING)) { ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this), NULL, @@ -1561,7 +1564,7 @@ namespace LLInitParam typedef Deprecated Ignored; protected: - static BlockDescriptor& blockDescriptor() + static BlockDescriptor& selfBlockDescriptor() { static BlockDescriptor sBlockDescriptor; return sBlockDescriptor; @@ -1574,6 +1577,13 @@ namespace LLInitParam public Param { public: + typedef enum e_value_age + { + OLDER_THAN_BLOCK, // mData.mValue needs to be refreshed from the block parameters + NEWER_THAN_BLOCK, // mData.mValue holds the authoritative value (which has been replicated to the block parameters via setBlockFromValue) + SAME_AS_BLOCK // mData.mValue is derived from the block parameters, which are authoritative + } EValueAge; + typedef BlockValue<T> self_t; typedef Block<TypedParam<T, TypeValues<T>, false> > block_t; typedef const T& value_const_ref_t; @@ -1582,9 +1592,9 @@ namespace LLInitParam BlockValue(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count) : Param(block_descriptor.mCurrentBlockPtr), - mData(value) + mData(value, NEWER_THAN_BLOCK) { - if (block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING) + if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING)) { ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this), &mergeWith, @@ -1604,7 +1614,7 @@ namespace LLInitParam static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) { - self_t& typed_param = static_cast<self_t&>(param); + DERIVED& typed_param = static_cast<DERIVED&>(param); // type to apply parse direct value T if (name_stack.first == name_stack.second) { @@ -1612,7 +1622,10 @@ namespace LLInitParam { typed_param.enclosingBlock().setLastChangedParam(param, true); typed_param.setProvided(true); - typed_param.mData.mLastParamVersion = typed_param.BaseBlock::getLastChangeVersion(); + typed_param.mData.clearKey(); + typed_param.mData.mValueAge = NEWER_THAN_BLOCK; + typed_param.setBlockFromValue(); + return true; } @@ -1628,7 +1641,9 @@ namespace LLInitParam typed_param.mData.setKey(name); typed_param.enclosingBlock().setLastChangedParam(param, true); typed_param.setProvided(true); - typed_param.mData.mLastParamVersion = typed_param.BaseBlock::getLastChangeVersion(); + typed_param.mData.mValueAge = NEWER_THAN_BLOCK; + typed_param.setBlockFromValue(); + return true; } } @@ -1703,16 +1718,18 @@ namespace LLInitParam bool isProvided() const { - // either param value provided directly or block is sufficiently filled in + if (!Param::getProvided()) return false; + + // block has an updated parameter // if cached value is stale, regenerate from params - if (Param::getProvided() && mData.mLastParamVersion < BaseBlock::getLastChangeVersion()) + if (mData.mValueAge == OLDER_THAN_BLOCK) { if (block_t::validateBlock(false)) { static_cast<const DERIVED*>(this)->setValueFromBlock(); // clear stale keyword associated with old value mData.clearKey(); - mData.mLastParamVersion = BaseBlock::getLastChangeVersion(); + mData.mValueAge = SAME_AS_BLOCK; return true; } else @@ -1722,8 +1739,11 @@ namespace LLInitParam return false; } } - // either no data provided, or we have a valid value in hand - return Param::getProvided(); + else + { + // we have a valid value in hand + return true; + } } void set(value_assignment_t val, bool flag_as_provided = true) @@ -1731,7 +1751,7 @@ namespace LLInitParam Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided); // set param version number to be up to date, so we ignore block contents - mData.mLastParamVersion = BaseBlock::getLastChangeVersion(); + mData.mValueAge = NEWER_THAN_BLOCK; mData.mValue = val; mData.clearKey(); @@ -1756,6 +1776,8 @@ namespace LLInitParam if (user_provided) { setProvided(true); // some component provided + // a parameter changed, so our value is out of date + mData.mValueAge = OLDER_THAN_BLOCK; } } @@ -1763,54 +1785,54 @@ namespace LLInitParam value_assignment_t get() const { // if some parameters were provided, issue warnings on invalid blocks - if (Param::getProvided() && (mData.mLastParamVersion < BaseBlock::getLastChangeVersion())) + if (Param::getProvided() && (mData.mValueAge == OLDER_THAN_BLOCK)) { // go ahead and issue warnings at this point if any param is invalid if(block_t::validateBlock(true)) { static_cast<const DERIVED*>(this)->setValueFromBlock(); mData.clearKey(); - mData.mLastParamVersion = BaseBlock::getLastChangeVersion(); + mData.mValueAge = SAME_AS_BLOCK; } } return mData.mValue; } - // mutable to allow lazy updates on get + struct Data : public key_cache_t { - Data(const T& value) + Data(const T& value, EValueAge age) : mValue(value), - mLastParamVersion(0) + mValueAge(age) {} - T mValue; - S32 mLastParamVersion; + T mValue; + EValueAge mValueAge; }; + // mutable to allow lazy updates on get mutable Data mData; private: static bool mergeWith(Param& dst, const Param& src, bool overwrite) { - const self_t& src_typed_param = static_cast<const self_t&>(src); - self_t& dst_typed_param = static_cast<self_t&>(dst); + const DERIVED& src_typed_param = static_cast<const DERIVED&>(src); + DERIVED& dst_typed_param = static_cast<DERIVED&>(dst); if (src_typed_param.isProvided() && (overwrite || !dst_typed_param.isProvided())) { - // assign individual parameters - dst_typed_param.BaseBlock::merge(block_t::blockDescriptor(), src_typed_param, overwrite); - - // then copy actual value - dst_typed_param.mData.mValue = src_typed_param.get(); - dst_typed_param.mData.clearKey(); - dst_typed_param.setProvided(true); - - // Propagate value back to block params since the value was updated during this merge. - // This will result in mData.mValue and the block params being in sync. - static_cast<DERIVED&>(dst_typed_param).setBlockFromValue(); + if (src_typed_param.mData.mValueAge == NEWER_THAN_BLOCK) + { + // copy value over + dst_typed_param.set(src_typed_param.get()); + } + else + { + // merge individual parameters into destination + dst_typed_param.merge(block_t::selfBlockDescriptor(), src_typed_param, overwrite); + } return true; } return false; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7094d68292..128d67d73d 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -164,7 +164,6 @@ set(viewer_SOURCE_FILES llfloaterbuyland.cpp llfloatercamera.cpp llfloatercolorpicker.cpp - llfloatercustomize.cpp llfloaterdaycycle.cpp llfloaterenvsettings.cpp llfloaterevent.cpp @@ -268,6 +267,7 @@ set(viewer_SOURCE_FILES lllandmarkactions.cpp lllandmarklist.cpp lllistbrowser.cpp + lllistcontextmenu.cpp lllistview.cpp lllocaltextureobject.cpp lllocationhistory.cpp @@ -553,7 +553,6 @@ set(viewer_SOURCE_FILES llworldmapmessage.cpp llworldmipmap.cpp llworldmapview.cpp - llworldview.cpp llxmlrpclistener.cpp llxmlrpctransaction.cpp noise.cpp @@ -682,7 +681,6 @@ set(viewer_HEADER_FILES llfloaterbuyland.h llfloatercamera.h llfloatercolorpicker.h - llfloatercustomize.h llfloaterdaycycle.h llfloaterenvsettings.h llfloaterevent.h @@ -786,6 +784,7 @@ set(viewer_HEADER_FILES lllandmarklist.h lllightconstants.h lllistbrowser.h + lllistcontextmenu.h lllistview.h lllocaltextureobject.h lllocationhistory.h @@ -1069,7 +1068,6 @@ set(viewer_HEADER_FILES llworldmapmessage.h llworldmipmap.h llworldmapview.h - llworldview.h llxmlrpclistener.h llxmlrpctransaction.h macmain.h diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 0d27c20d40..16e39fc1c4 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -25,7 +25,7 @@ <string>AppCache</string> <string>Window</string> <string>RenderInit</string> - <string>GridManager</string> + <string>MediaAuth</string> </array> </map> <map> @@ -41,7 +41,6 @@ </array> <key>tags</key> <array> - <string>GridManager</string> </array> </map> </array> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1d27d00451..4ce5358ade 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2676,6 +2676,17 @@ <key>Value</key> <integer>4</integer> </map> + <key>DumpVFSCaches</key> + <map> + <key>Comment</key> + <string>Dump VFS caches on startup.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>DynamicCameraStrength</key> <map> <key>Comment</key> @@ -5971,7 +5982,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>0.2</real> + <real>0.125</real> </map> <key>MediaRollOffMin</key> <map> @@ -5982,7 +5993,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>7.0</real> + <real>5.0</real> </map> <key>MediaRollOffMax</key> <map> @@ -8182,7 +8193,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>ShowObjectRenderingCost</key> <map> @@ -9053,6 +9064,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>TextureDiscardLevel</key> + <map> + <key>Comment</key> + <string>Specify texture resolution (0 = highest, 5 = lowest)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>0</integer> + </map> <key>TextureLoadFullRes</key> <map> <key>Comment</key> @@ -10340,7 +10362,17 @@ <key>Value</key> <real>10.0</real> </map> - + <key>UseNewWalkRun</key> + <map> + <key>Comment</key> + <string>Replace standard walk/run animations with new ones.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>UseStartScreen</key> <map> <key>Comment</key> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index f1c1a142ad..b4add267fe 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -56,7 +56,7 @@ Disregard128DefaultDrawDistance 1 1 Disregard96DefaultDrawDistance 1 1 RenderTextureMemoryMultiple 1 1.0 RenderShaderLightingMaxLevel 1 3 - +SkyUseClassicClouds 1 1 // // Low Graphics Settings @@ -64,25 +64,26 @@ RenderShaderLightingMaxLevel 1 3 list Low RenderAnisotropic 1 0 RenderAvatarCloth 1 0 -RenderAvatarLODFactor 1 0.5 +RenderAvatarLODFactor 1 0 RenderAvatarMaxVisible 1 3 RenderAvatarVP 1 0 RenderFarClip 1 64 -RenderFlexTimeFactor 1 0.5 +RenderFlexTimeFactor 1 0 RenderGlowResolutionPow 1 8 RenderLightingDetail 1 0 -RenderMaxPartCount 1 1024 +RenderMaxPartCount 1 0 RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 -RenderTreeLODFactor 1 0.5 +RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 -RenderVolumeLODFactor 1 1.125 +RenderVolumeLODFactor 1 0 RenderWaterReflections 1 0 VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 WLSkyDetail 1 48 +SkyUseClassicClouds 1 0 // // Mid Graphics Settings diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index d1d11ee173..4fb529ab39 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -55,6 +55,7 @@ WLSkyDetail 1 128 Disregard128DefaultDrawDistance 1 1 Disregard96DefaultDrawDistance 1 1 RenderTextureMemoryMultiple 1 1.0 +SkyUseClassicClouds 1 1 // // Low Graphics Settings @@ -62,25 +63,26 @@ RenderTextureMemoryMultiple 1 1.0 list Low RenderAnisotropic 1 0 RenderAvatarCloth 1 0 -RenderAvatarLODFactor 1 0.5 +RenderAvatarLODFactor 1 0 RenderAvatarMaxVisible 1 3 RenderAvatarVP 1 0 RenderFarClip 1 64 -RenderFlexTimeFactor 1 0.5 +RenderFlexTimeFactor 1 0 RenderGlowResolutionPow 1 8 RenderLightingDetail 1 0 -RenderMaxPartCount 1 1024 +RenderMaxPartCount 1 0 RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 -RenderTreeLODFactor 1 0.5 +RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 -RenderVolumeLODFactor 1 1.125 +RenderVolumeLODFactor 1 0 RenderWaterReflections 1 0 VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 WLSkyDetail 1 48 +SkyUseClassicClouds 1 0 // // Mid Graphics Settings diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index efd7ec7a91..fbc589d3e7 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -57,6 +57,7 @@ Disregard96DefaultDrawDistance 1 1 RenderTextureMemoryMultiple 1 0.5 Disregard128DefaultDrawDistance 1 1 Disregard96DefaultDrawDistance 1 1 +SkyUseClassicClouds 1 1 // // Low Graphics Settings @@ -64,25 +65,26 @@ Disregard96DefaultDrawDistance 1 1 list Low RenderAnisotropic 1 0 RenderAvatarCloth 1 0 -RenderAvatarLODFactor 1 0.5 +RenderAvatarLODFactor 1 0 RenderAvatarMaxVisible 1 3 RenderAvatarVP 1 0 RenderFarClip 1 64 -RenderFlexTimeFactor 1 0.5 +RenderFlexTimeFactor 1 0 RenderGlowResolutionPow 1 8 RenderLightingDetail 1 0 -RenderMaxPartCount 1 1024 +RenderMaxPartCount 1 0 RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 -RenderTreeLODFactor 1 0.5 +RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 -RenderVolumeLODFactor 1 1.125 +RenderVolumeLODFactor 1 0 RenderWaterReflections 1 0 VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 WLSkyDetail 1 48 +SkyUseClassicClouds 1 0 // // Mid Graphics Settings diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 3754f30a66..5aad295cb1 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -203,14 +203,14 @@ NVIDIA GeForce 7100 .*NVIDIA.*GeForce 71.* 0 1 NVIDIA GeForce 7200 .*NVIDIA.*GeForce 72.* 1 1 NVIDIA GeForce 7300 .*NVIDIA.*GeForce 73.* 1 1 NVIDIA GeForce 7500 .*NVIDIA.*GeForce 75.* 1 1 -NVIDIA GeForce 7600 .*NVIDIA.*GeForce 76.* 3 1 -NVIDIA GeForce 7800 .*NVIDIA.*GeForce.*78.* 3 1 -NVIDIA GeForce 7900 .*NVIDIA.*GeForce.*79.* 3 1 +NVIDIA GeForce 7600 .*NVIDIA.*GeForce 76.* 1 1 +NVIDIA GeForce 7800 .*NVIDIA.*GeForce.*78.* 1 1 +NVIDIA GeForce 7900 .*NVIDIA.*GeForce.*79.* 1 1 NVIDIA GeForce 8100 .*NVIDIA.*GeForce 81.* 1 1 NVIDIA GeForce 8200 .*NVIDIA.*GeForce 82.* 1 1 NVIDIA GeForce 8300 .*NVIDIA.*GeForce 83.* 1 1 NVIDIA GeForce 8400 .*NVIDIA.*GeForce 84.* 1 1 -NVIDIA GeForce 8500 .*GeForce 85.* 3 1 +NVIDIA GeForce 8500 .*GeForce 85.* 1 1 NVIDIA GeForce 8600M .*NVIDIA.*GeForce.*8600M.* 1 1 NVIDIA GeForce 8600 .*NVIDIA.*GeForce 86.* 3 1 NVIDIA GeForce 8700 .*NVIDIA.*GeForce 87.* 3 1 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 7d84f8d071..0fa77ff7c2 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -45,7 +45,6 @@ #include "llchannelmanager.h" #include "llconsole.h" #include "llfloatercamera.h" -#include "llfloatercustomize.h" #include "llfloaterreg.h" #include "llfloatertools.h" #include "llgroupactions.h" @@ -73,6 +72,7 @@ #include "llviewerdisplay.h" #include "llviewerjoystick.h" #include "llviewermediafocus.h" +#include "llviewermenu.h" #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llviewerstats.h" diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 9638d0e94f..47f290ad3b 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -38,7 +38,6 @@ #include "llagent.h" #include "llanimationstates.h" #include "llfloatercamera.h" -#include "llfloatercustomize.h" #include "llfloaterreg.h" #include "llhudmanager.h" #include "lljoystickbutton.h" @@ -48,6 +47,7 @@ #include "llviewercamera.h" #include "llviewercontrol.h" #include "llviewerjoystick.h" +#include "llviewermenu.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" #include "llviewerwindow.h" @@ -1538,26 +1538,6 @@ F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_glob { F32 ui_offset = 0.f; - if (gFloaterCustomize) - { - const LLRect& rect = gFloaterCustomize->getRect(); - - // Move the camera so that the avatar isn't covered up by this floater. - F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled())))); - F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians - F32 offset = tan(apparent_angle); - - if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) ) - { - // Move the avatar to the right (camera to the left) - ui_offset = offset; - } - else - { - // Move the avatar to the left (camera to the right) - ui_offset = -offset; - } - } F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal()); mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f)); return mUIOffset * range; diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 6b5e43973e..cc9e68d593 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -39,7 +39,6 @@ #include "llagentwearablesfetch.h" #include "llappearancemgr.h" #include "llcallbacklist.h" -#include "llfloatercustomize.h" #include "llfolderview.h" #include "llgesturemgr.h" #include "llinventorybridge.h" @@ -49,6 +48,7 @@ #include "llmd5.h" #include "llnotificationsutil.h" #include "llpaneloutfitsinventory.h" +#include "llsidepanelappearance.h" #include "llsidetray.h" #include "lltexlayer.h" #include "llviewerregion.h" @@ -539,9 +539,15 @@ void LLAgentWearables::setWearableName(const LLUUID& item_id, const std::string& BOOL LLAgentWearables::isWearableModifiable(LLWearableType::EType type, U32 index) const { LLUUID item_id = getWearableItemID(type, index); - if (!item_id.isNull()) + return item_id.notNull() ? isWearableModifiable(item_id) : FALSE; +} + +BOOL LLAgentWearables::isWearableModifiable(const LLUUID& item_id) const +{ + const LLUUID& linked_id = gInventory.getLinkedItemID(item_id); + if (linked_id.notNull()) { - LLInventoryItem* item = gInventory.getItem(item_id); + LLInventoryItem* item = gInventory.getItem(linked_id); if (item && item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID())) { @@ -595,12 +601,30 @@ LLInventoryItem* LLAgentWearables::getWearableInventoryItem(LLWearableType::ETyp const LLWearable* LLAgentWearables::getWearableFromItemID(const LLUUID& item_id) const { + const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id); for (S32 i=0; i < LLWearableType::WT_COUNT; i++) { for (U32 j=0; j < getWearableCount((LLWearableType::EType)i); j++) { const LLWearable * curr_wearable = getWearable((LLWearableType::EType)i, j); - if (curr_wearable && (curr_wearable->getItemID() == item_id)) + if (curr_wearable && (curr_wearable->getItemID() == base_item_id)) + { + return curr_wearable; + } + } + } + return NULL; +} + +LLWearable* LLAgentWearables::getWearableFromItemID(const LLUUID& item_id) +{ + const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id); + for (S32 i=0; i < LLWearableType::WT_COUNT; i++) + { + for (U32 j=0; j < getWearableCount((LLWearableType::EType)i); j++) + { + LLWearable * curr_wearable = getWearable((LLWearableType::EType)i, j); + if (curr_wearable && (curr_wearable->getItemID() == base_item_id)) { return curr_wearable; } @@ -812,6 +836,16 @@ LLWearable* LLAgentWearables::getTopWearable(const LLWearableType::EType type) return getWearable(type, count-1); } +LLWearable* LLAgentWearables::getBottomWearable(const LLWearableType::EType type) +{ + if (getWearableCount(type) == 0) + { + return NULL; + } + + return getWearable(type, 0); +} + U32 LLAgentWearables::getWearableCount(const LLWearableType::EType type) const { wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type); @@ -860,12 +894,7 @@ const LLUUID LLAgentWearables::getWearableAssetID(LLWearableType::EType type, U3 BOOL LLAgentWearables::isWearingItem(const LLUUID& item_id) const { - const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id); - if (getWearableFromItemID(base_item_id) != NULL) - { - return TRUE; - } - return FALSE; + return getWearableFromItemID(item_id) != NULL; } // MULTI-WEARABLE: DEPRECATED (see backwards compatibility) @@ -1646,14 +1675,12 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty void LLAgentWearables::userRemoveAllClothes() { // We have to do this up front to avoid having to deal with the case of multiple wearables being dirty. - if (gFloaterCustomize) - { - gFloaterCustomize->askToSaveIfDirty(userRemoveAllClothesStep2); - } - else + if (gAgentCamera.cameraCustomizeAvatar()) { - userRemoveAllClothesStep2(TRUE); + // switching to outfit editor should automagically save any currently edited wearable + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); } + userRemoveAllClothesStep2(TRUE); } // static @@ -1862,6 +1889,20 @@ void LLAgentWearables::checkWearablesLoaded() const #endif } +// Returns false if the given wearable is already topmost/bottommost +// (depending on closer_to_body parameter). +bool LLAgentWearables::canMoveWearable(const LLUUID& item_id, bool closer_to_body) +{ + const LLWearable* wearable = getWearableFromItemID(item_id); + if (!wearable) return false; + + LLWearableType::EType wtype = wearable->getType(); + const LLWearable* marginal_wearable = closer_to_body ? getBottomWearable(wtype) : getTopWearable(wtype); + if (!marginal_wearable) return false; + + return wearable != marginal_wearable; +} + BOOL LLAgentWearables::areWearablesLoaded() const { checkWearablesLoaded(); @@ -1932,6 +1973,23 @@ bool LLAgentWearables::moveWearable(const LLViewerInventoryItem* item, bool clos return false; } +// static +void LLAgentWearables::editWearable(const LLUUID& item_id) +{ + LLViewerInventoryItem* item; + LLWearable* wearable; + + if ((item = gInventory.getLinkedItem(item_id)) && + (wearable = gAgentWearables.getWearableFromAssetID(item->getAssetUUID())) && + gAgentWearables.isWearableModifiable(item->getUUID()) && + item->isFinished()) + { + LLPanel* panel = LLSideTray::getInstance()->showPanel("panel_outfit_edit", LLSD()); + // copied from LLPanelOutfitEdit::onEditWearableClicked() + LLSidepanelAppearance::editWearable(wearable, panel->getParent()); + } +} + void LLAgentWearables::updateServer() { sendAgentWearablesUpdate(); diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 734bd9fd47..c53b1333fc 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -71,17 +71,18 @@ protected: public: BOOL isWearingItem(const LLUUID& item_id) const; BOOL isWearableModifiable(LLWearableType::EType type, U32 index /*= 0*/) const; + BOOL isWearableModifiable(const LLUUID& item_id) const; + BOOL isWearableCopyable(LLWearableType::EType type, U32 index /*= 0*/) const; BOOL areWearablesLoaded() const; void updateWearablesLoaded(); void checkWearablesLoaded() const; + bool canMoveWearable(const LLUUID& item_id, bool closer_to_body); // Note: False for shape, skin, eyes, and hair, unless you have MORE than 1. bool canWearableBeRemoved(const LLWearable* wearable) const; void animateAllWearableParams(F32 delta, BOOL upload_bake); - - bool moveWearable(const LLViewerInventoryItem* item, bool closer_to_body); //-------------------------------------------------------------------- // Accessors @@ -90,12 +91,14 @@ public: const LLUUID getWearableItemID(LLWearableType::EType type, U32 index /*= 0*/) const; const LLUUID getWearableAssetID(LLWearableType::EType type, U32 index /*= 0*/) const; const LLWearable* getWearableFromItemID(const LLUUID& item_id) const; + LLWearable* getWearableFromItemID(const LLUUID& item_id); LLWearable* getWearableFromAssetID(const LLUUID& asset_id); LLInventoryItem* getWearableInventoryItem(LLWearableType::EType type, U32 index /*= 0*/); static BOOL selfHasWearable(LLWearableType::EType type); LLWearable* getWearable(const LLWearableType::EType type, U32 index /*= 0*/); const LLWearable* getWearable(const LLWearableType::EType type, U32 index /*= 0*/) const; LLWearable* getTopWearable(const LLWearableType::EType type); + LLWearable* getBottomWearable(const LLWearableType::EType type); U32 getWearableCount(const LLWearableType::EType type) const; U32 getWearableCount(const U32 tex_index) const; @@ -134,6 +137,14 @@ protected: void recoverMissingWearableDone(); //-------------------------------------------------------------------- + // Editing/moving wearables + //-------------------------------------------------------------------- + +public: + static void editWearable(const LLUUID& item_id); + bool moveWearable(const LLViewerInventoryItem* item, bool closer_to_body); + + //-------------------------------------------------------------------- // Removing wearables //-------------------------------------------------------------------- public: diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 03d09a3798..43a0d48d8b 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -37,6 +37,7 @@ #include "llagentwearables.h" #include "llappearancemgr.h" #include "llinventoryfunctions.h" +#include "llstartup.h" #include "llvoavatarself.h" LLInitialWearablesFetch::LLInitialWearablesFetch(const LLUUID& cof_id) : @@ -260,8 +261,11 @@ void LLLibraryOutfitsFetch::folderDone() LLInventoryModel::item_array_t wearable_array; gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array, LLInventoryModel::EXCLUDE_TRASH); - // Early out if we already have items in My Outfits. - if (cat_array.count() > 0 || wearable_array.count() > 0) + + // Early out if we already have items in My Outfits + // except the case when My Outfits contains just initial outfit + if (cat_array.count() > 1 || + cat_array.count() == 1 && cat_array[0]->getUUID() != LLAppearanceMgr::getInstance()->getBaseOutfitUUID()) { mOutfitsPopulated = true; return; @@ -272,6 +276,7 @@ void LLLibraryOutfitsFetch::folderDone() // If Library->Clothing->Initial Outfits exists, use that. LLNameCategoryCollector matchFolderFunctor("Initial Outfits"); + cat_array.clear(); gInventory.collectDescendentsIf(mLibraryClothingID, cat_array, wearable_array, LLInventoryModel::EXCLUDE_TRASH, @@ -489,6 +494,9 @@ void LLLibraryOutfitsFetch::contentsDone() llwarns << "Library folder import for uuid:" << folder_id << " failed to find folder." << llendl; continue; } + + //initial outfit should be already in My Outfits + if (cat->getName() == LLStartUp::getInitialOutfitName()) continue; // First, make a folder in the My Outfits directory. LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, cat->getName()); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 4c50138891..8cc4436188 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -34,10 +34,10 @@ #include "llaccordionctrltab.h" #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" #include "llappearancemgr.h" #include "llcommandhandler.h" -#include "llfloatercustomize.h" #include "llgesturemgr.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" @@ -152,27 +152,6 @@ public: }; -//Inventory collect functor collecting wearables of a specific wearable type -class LLFindClothesOfType : public LLInventoryCollectFunctor -{ -public: - LLFindClothesOfType(LLWearableType::EType type) : mWearableType(type) {} - virtual ~LLFindClothesOfType() {} - virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) - { - if (!item) return false; - if (item->getType() != LLAssetType::AT_CLOTHING) return false; - - LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item); - if (!vitem || vitem->getWearableType() != mWearableType) return false; - - return true; - } - - const LLWearableType::EType mWearableType; -}; - - LLUpdateAppearanceOnDestroy::LLUpdateAppearanceOnDestroy(): mFireCount(0) { @@ -526,7 +505,7 @@ bool LLWearableHoldingPattern::pollMissingWearables() if (done) { - gAgentAvatarp->wearablesLoaded(); + gAgentAvatarp->debugWearablesLoaded(); clearCOFLinksForMissingWearables(); onAllComplete(); } @@ -671,7 +650,7 @@ const LLUUID LLAppearanceMgr::getBaseOutfitUUID() return outfit_cat->getUUID(); } -bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_update) +bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_update, bool replace) { if (item_id_to_wear.isNull()) return false; @@ -692,6 +671,14 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up LLNotificationsUtil::add("CanNotChangeAppearanceUntilLoaded"); return false; } + + // 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. + if (replace || item_to_wear->getType() == LLAssetType::AT_BODYPART) + { + removeCOFLinksOfType(item_to_wear->getWearableType(), false); + } + addCOFItemLink(item_to_wear, do_update); break; case LLAssetType::AT_OBJECT: @@ -711,6 +698,35 @@ void LLAppearanceMgr::changeOutfit(bool proceed, const LLUUID& category, bool ap LLAppearanceMgr::instance().updateCOF(category,append); } +void LLAppearanceMgr::replaceCurrentOutfit(const LLUUID& new_outfit) +{ + LLViewerInventoryCategory* cat = gInventory.getCategory(new_outfit); + wearInventoryCategory(cat, false, false); +} + +void LLAppearanceMgr::addCategoryToCurrentOutfit(const LLUUID& cat_id) +{ + LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); + wearInventoryCategory(cat, false, true); +} + +void LLAppearanceMgr::takeOffOutfit(const LLUUID& cat_id) +{ + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLFindWearables collector; + + gInventory.collectDescendentsIf(cat_id, cats, items, FALSE, collector); + + LLInventoryModel::item_array_t::const_iterator it = items.begin(); + const LLInventoryModel::item_array_t::const_iterator it_end = items.end(); + for( ; it_end != it; ++it) + { + LLViewerInventoryItem* item = *it; + removeItemFromAvatar(item->getUUID()); + } +} + // Create a copy of src_id + contents as a subfolder of dst_id. void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb) @@ -910,7 +926,7 @@ void LLAppearanceMgr::linkAll(const LLUUID& cat_uuid, const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid); const std::string cat_name = cat ? cat->getName() : "CAT NOT FOUND"; - llinfos << "Linking Item [ name:" << item->getName() << " UUID:" << item->getUUID() << " ] to Category [ name:" << cat_name << " UUID:" << cat_uuid << " ] " << llendl; + llinfos << "Linking Item [ name:" << item->getName() << " UUID:" << item->getUUID() << " ] to Category [ name:" << cat_name << " UUID:" << cat_uuid << " ] " << llendl; // Seraph remove for 2.1 } } @@ -979,13 +995,13 @@ void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append) llinfos << "creating LLUpdateAppearanceOnDestroy" << llendl; LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; - llinfos << "Linking body items" << llendl; + llinfos << "Linking body items" << llendl; // Seraph remove for 2.1 linkAll(cof, body_items, link_waiter); - llinfos << "Linking wear items" << llendl; + llinfos << "Linking wear items" << llendl; // Seraph remove for 2.1 linkAll(cof, wear_items, link_waiter); - llinfos << "Linking obj items" << llendl; + llinfos << "Linking obj items" << llendl; // Seraph remove for 2.1 linkAll(cof, obj_items, link_waiter); - llinfos << "Linking gesture items" << llendl; + llinfos << "Linking gesture items" << llendl; // Seraph remove for 2.1 linkAll(cof, gest_items, link_waiter); // Add link to outfit if category is an outfit. @@ -1346,16 +1362,13 @@ void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* catego llinfos << "wearInventoryCategoryOnAvatar( " << category->getName() << " )" << llendl; - if( gFloaterCustomize ) - { - gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceMgr::changeOutfit, - &LLAppearanceMgr::instance(), - _1, category->getUUID(), append)); - } - else + if (gAgentCamera.cameraCustomizeAvatar()) { - LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append); + // switching to outfit editor should automagically save any currently edited wearable + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); } + + LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append); } void LLAppearanceMgr::wearOutfitByName(const std::string& name) @@ -1495,7 +1508,7 @@ void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update // TODO: MULTI-WEARABLE: check for wearable limit for clothing types else if (is_body_part && (vitem->isWearableType()) && (vitem->getWearableType() == wearable_type)) { - if (inv_item->getIsLinkType()) + if (inv_item->getIsLinkType() && (vitem->getWearableType() == wearable_type)) { gInventory.purgeObject(inv_item->getUUID()); } @@ -1563,6 +1576,29 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, bool do_update) } } +void LLAppearanceMgr::removeCOFLinksOfType(LLWearableType::EType type, bool do_update) +{ + LLFindWearablesOfType filter_wearables_of_type(type); + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLInventoryModel::item_array_t::const_iterator it; + + gInventory.collectDescendentsIf(getCOF(), cats, items, true, filter_wearables_of_type); + for (it = items.begin(); it != items.end(); ++it) + { + const LLViewerInventoryItem* item = *it; + if (item->getIsLinkType()) // we must operate on links only + { + gInventory.purgeObject(item->getUUID()); + } + } + + if (do_update) + { + updateAppearanceFromCOF(); + } +} + bool sort_by_linked_uuid(const LLViewerInventoryItem* item1, const LLViewerInventoryItem* item2) { if (!item1 || !item2) @@ -1667,7 +1703,7 @@ void LLAppearanceMgr::autopopulateOutfits() // Handler for anything that's deferred until avatar de-clouds. void LLAppearanceMgr::onFirstFullyVisible() { - gAgentAvatarp->avatarVisible(); + gAgentAvatarp->debugAvatarVisible(); autopopulateOutfits(); } @@ -1893,7 +1929,6 @@ void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove) } } - bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_body) { if (!item || !item->isWearableType()) return false; @@ -1902,11 +1937,11 @@ bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_b LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; - LLFindClothesOfType filter_wearables_of_type(item->getWearableType()); + LLFindWearablesOfType filter_wearables_of_type(item->getWearableType()); gInventory.collectDescendentsIf(getCOF(), cats, items, true, filter_wearables_of_type); if (items.empty()) return false; - //*TODO all items are not guarantied to have valid descriptions (check?) + // We assume that the items have valid descriptions. std::sort(items.begin(), items.end(), WearablesOrderComparator(item->getWearableType())); if (closer_to_body && items.front() == item) return false; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 516dada39d..96541beb7d 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -58,6 +58,9 @@ public: void wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append); void wearOutfitByName(const std::string& name); void changeOutfit(bool proceed, const LLUUID& category, bool append); + void replaceCurrentOutfit(const LLUUID& new_outfit); + void takeOffOutfit(const LLUUID& cat_id); + void addCategoryToCurrentOutfit(const LLUUID& cat_id); // Copy all items and the src category itself. void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, @@ -81,7 +84,7 @@ public: const LLUUID getBaseOutfitUUID(); // Wear/attach an item (from a user's inventory) on the agent - bool wearItemOnAvatar(const LLUUID& item_to_wear, bool do_update = true); + bool wearItemOnAvatar(const LLUUID& item_to_wear, bool do_update = true, bool replace = false); // Update the displayed outfit name in UI. void updatePanelOutfitName(const std::string& name); @@ -111,6 +114,7 @@ public: // Remove COF entries void removeCOFItemLinks(const LLUUID& item_id, bool do_update = true); + void removeCOFLinksOfType(LLWearableType::EType type, bool do_update = true); // Add COF link to ensemble folder. void addEnsembleLink(LLInventoryCategory* item, bool do_update = true); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f7f7cb599e..475a075d7e 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2979,6 +2979,44 @@ S32 LLAppViewer::getCacheVersion() return cache_version ; } +void dumpVFSCaches() +{ + llinfos << "======= Static VFS ========" << llendl; + gStaticVFS->listFiles(); +#if LL_WINDOWS + llinfos << "======= Dumping static VFS to StaticVFSDump ========" << llendl; + WCHAR w_str[MAX_PATH]; + GetCurrentDirectory(MAX_PATH, w_str); + S32 res = LLFile::mkdir("StaticVFSDump"); + if (res == -1) + { + if (errno != EEXIST) + { + llwarns << "Couldn't create dir StaticVFSDump" << llendl; + } + } + SetCurrentDirectory(utf8str_to_utf16str("StaticVFSDump").c_str()); + gStaticVFS->dumpFiles(); + SetCurrentDirectory(w_str); +#endif + + llinfos << "========= Dynamic VFS ====" << llendl; + gVFS->listFiles(); +#if LL_WINDOWS + llinfos << "========= Dumping dynamic VFS to VFSDump ====" << llendl; + res = LLFile::mkdir("VFSDump"); + if (res == -1) + { + if (errno != EEXIST) + { + llwarns << "Couldn't create dir VFSDump" << llendl; + } + } + SetCurrentDirectory(utf8str_to_utf16str("VFSDump").c_str()); + gVFS->dumpFiles(); + SetCurrentDirectory(w_str); +#endif +} bool LLAppViewer::initCache() { mPurgeCache = false; @@ -3196,11 +3234,12 @@ bool LLAppViewer::initCache() { LLVFile::initClass(); - //llinfos << "Static VFS listing" << llendl; - //gStaticVFS->listFiles(); - - //llinfos << "regular VFS listing" << llendl; - //gVFS->listFiles(); +#ifndef LL_RELEASE_FOR_DOWNLOAD + if (gSavedSettings.getBOOL("DumpVFSCaches")) + { + dumpVFSCaches(); + } +#endif return true; } diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 24290ac089..3275d784a3 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -46,6 +46,7 @@ #include "llavatariconctrl.h" #include "llcallingcard.h" // for LLAvatarTracker #include "llcachename.h" +#include "lllistcontextmenu.h" #include "llrecentpeople.h" #include "lluuid.h" #include "llvoiceclient.h" diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index a9320055ca..fffc6e6e73 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -38,6 +38,7 @@ #include "llavatarlistitem.h" class LLTimer; +class LLListContextMenu; /** * Generic list of avatars. @@ -77,7 +78,7 @@ public: uuid_vec_t& getIDs() { return mIDs; } bool contains(const LLUUID& id); - void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; } + void setContextMenu(LLListContextMenu* menu) { mContextMenu = menu; } void setSessionID(const LLUUID& session_id) { mSessionID = session_id; } const LLUUID& getSessionID() { return mSessionID; } @@ -127,7 +128,7 @@ private: uuid_vec_t mIDs; LLUUID mSessionID; - LLAvatarListItem::ContextMenu* mContextMenu; + LLListContextMenu* mContextMenu; commit_signal_t mRefreshCompleteSignal; mouse_signal_t mItemDoubleClickSignal; diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 5a8ad73c83..c74075d67f 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -1,6 +1,6 @@ /** * @file llavatarlistitem.cpp - * @avatar list item source file + * @brief avatar list item source file * * $LicenseInfo:firstyear=2009&license=viewergpl$ * diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index c6fac7a9f1..ba9c3574d5 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -1,6 +1,6 @@ /** * @file llavatarlistitem.h - * @avatar list item header file + * @brief avatar list item header file * * $LicenseInfo:firstyear=2009&license=viewergpl$ * @@ -67,13 +67,6 @@ public: IS_OFFLINE, } EItemState; - class ContextMenu - { - public: - virtual void show(LLView* spawning_view, const uuid_vec_t& selected_uuids, S32 x, S32 y) = 0; - virtual void hide() = 0; - }; - /** * Creates an instance of LLAvatarListItem. * diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index caf43f5ddc..ae97460468 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -156,10 +156,6 @@ LLBottomTray::LLBottomTray(const LLSD&) , mMovementButton(NULL) , mResizeState(RS_NORESIZE) , mBottomTrayContextMenu(NULL) -, mMovementPanel(NULL) -, mCamPanel(NULL) -, mSnapshotPanel(NULL) -, mGesturePanel(NULL) , mCamButton(NULL) , mBottomTrayLite(NULL) , mIsInLiteMode(false) @@ -421,22 +417,12 @@ void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask) bool in_edit_box = edit_box->pointInView(local_x, local_y); - LLMenuItemGL* menu_item; - menu_item = mBottomTrayContextMenu->findChild<LLMenuItemGL>("NearbyChatBar_Cut"); - if(menu_item) - menu_item->setVisible(in_edit_box); - menu_item = mBottomTrayContextMenu->findChild<LLMenuItemGL>("NearbyChatBar_Copy"); - if(menu_item) - menu_item->setVisible(in_edit_box); - menu_item = mBottomTrayContextMenu->findChild<LLMenuItemGL>("NearbyChatBar_Paste"); - if(menu_item) - menu_item->setVisible(in_edit_box); - menu_item = mBottomTrayContextMenu->findChild<LLMenuItemGL>("NearbyChatBar_Delete"); - if(menu_item) - menu_item->setVisible(in_edit_box); - menu_item = mBottomTrayContextMenu->findChild<LLMenuItemGL>("NearbyChatBar_Select_All"); - if(menu_item) - menu_item->setVisible(in_edit_box); + mBottomTrayContextMenu->setItemVisible("Separator", in_edit_box); + mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Cut", in_edit_box); + mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Copy", in_edit_box); + mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Paste", in_edit_box); + mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Delete", in_edit_box); + mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Select_All", in_edit_box); } void LLBottomTray::showGestureButton(BOOL visible) @@ -483,12 +469,8 @@ BOOL LLBottomTray::postBuild() mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar"); mToolbarStack = getChild<LLLayoutStack>("toolbar_stack"); - mMovementPanel = getChild<LLPanel>("movement_panel"); - mMovementButton = mMovementPanel->getChild<LLButton>("movement_btn"); - mGesturePanel = getChild<LLPanel>("gesture_panel"); - mCamPanel = getChild<LLPanel>("cam_panel"); - mCamButton = mCamPanel->getChild<LLButton>("camera_btn"); - mSnapshotPanel = getChild<LLPanel>("snapshot_panel"); + mMovementButton = getChild<LLButton>("movement_btn"); + mCamButton = getChild<LLButton>("camera_btn"); setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4)); mSpeakPanel = getChild<LLPanel>("speak_panel"); @@ -1177,12 +1159,11 @@ bool LLBottomTray::canButtonBeShown(EResizeState processed_object_type) const void LLBottomTray::initResizeStateContainers() { - // *TODO: get rid of mGesturePanel, mMovementPanel, mCamPanel, mSnapshotPanel instance members // init map with objects should be processed for each type - mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_GESTURES, mGesturePanel)); - mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, mMovementPanel)); - mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel)); - mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_GESTURES, getChild<LLPanel>("gesture_panel"))); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, getChild<LLPanel>("movement_panel"))); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, getChild<LLPanel>("cam_panel"))); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, getChild<LLPanel>("snapshot_panel"))); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SIDEBAR, getChild<LLPanel>("sidebar_btn_panel"))); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_BUILD, getChild<LLPanel>("build_btn_panel"))); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SEARCH, getChild<LLPanel>("search_btn_panel"))); diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 889dc42097..c0887df39a 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -385,10 +385,6 @@ protected: LLNearbyChatBar* mNearbyChatBar; LLLayoutStack* mToolbarStack; LLMenuGL* mBottomTrayContextMenu; - LLPanel* mMovementPanel; - LLPanel* mCamPanel; - LLPanel* mSnapshotPanel; - LLPanel* mGesturePanel; LLButton* mCamButton; LLButton* mMovementButton; LLBottomTrayLite* mBottomTrayLite; diff --git a/indra/newview/llcloud.cpp b/indra/newview/llcloud.cpp index af6f4e3286..a4104923e4 100644 --- a/indra/newview/llcloud.cpp +++ b/indra/newview/llcloud.cpp @@ -329,16 +329,7 @@ void LLCloudLayer::setRegion(LLViewerRegion *regionp) void LLCloudLayer::destroy() { - // Kill all of the existing puffs - S32 i, j; - - for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++) - { - for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++) - { - mCloudGroups[i][j].cleanup(); - } - } + reset(); delete [] mDensityp; mDensityp = NULL; @@ -348,8 +339,17 @@ void LLCloudLayer::destroy() void LLCloudLayer::reset() { -} + // Kill all of the existing puffs + S32 i, j; + for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++) + { + for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++) + { + mCloudGroups[i][j].cleanup(); + } + } +} void LLCloudLayer::setWindPointer(LLWind *windp) { diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 7c4ceb3458..dfc203111a 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -35,9 +35,13 @@ #include "llcofwearables.h" #include "llagentdata.h" +#include "llagentwearables.h" #include "llappearancemgr.h" #include "llinventory.h" #include "llinventoryfunctions.h" +#include "lllistcontextmenu.h" +#include "llmenugl.h" +#include "llviewermenu.h" #include "llwearableitemslist.h" static LLRegisterPanelClassWrapper<LLCOFAccordionListAdaptor> t_cof_accodion_list_adaptor("accordion_list_adaptor"); @@ -49,14 +53,130 @@ const LLSD REARRANGE = LLSD().with("rearrange", LLSD()); static const LLWearableItemNameComparator WEARABLE_NAME_COMPARATOR; +////////////////////////////////////////////////////////////////////////// + +class CofAttachmentContextMenu : public LLListContextMenu +{ +protected: + + /*virtual*/ LLContextMenu* createMenu() + { + 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)); + + return createFromFile("menu_cof_attachment.xml"); + } +}; + +////////////////////////////////////////////////////////////////////////// + +class CofClothingContextMenu : public LLListContextMenu +{ +protected: + + /*virtual*/ LLContextMenu* createMenu() + { + 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.MoveUp", boost::bind(moveWearable, selected_id, false)); + registrar.add("Clothing.MoveDown", boost::bind(moveWearable, selected_id, true)); + registrar.add("Clothing.Edit", boost::bind(LLAgentWearables::editWearable, selected_id)); + + enable_registrar.add("Clothing.OnEnable", boost::bind(&CofClothingContextMenu::onEnable, this, _2)); + + return createFromFile("menu_cof_clothing.xml"); + } + + bool onEnable(const LLSD& data) + { + std::string param = data.asString(); + LLUUID selected_id = mUUIDs.back(); + + if ("move_up" == param) + { + return gAgentWearables.canMoveWearable(selected_id, false); + } + else if ("move_down" == param) + { + return gAgentWearables.canMoveWearable(selected_id, true); + } + else if ("edit" == param) + { + return gAgentWearables.isWearableModifiable(selected_id); + } + return true; + } + + // We don't use LLAppearanceMgr::moveWearable() directly because + // the item may be invalidated between setting the callback and calling it. + static bool moveWearable(const LLUUID& item_id, bool closer_to_body) + { + LLViewerInventoryItem* item = gInventory.getItem(item_id); + return LLAppearanceMgr::instance().moveWearable(item, closer_to_body); + } + +}; + +////////////////////////////////////////////////////////////////////////// + +class CofBodyPartContextMenu : public LLListContextMenu +{ +protected: + + /*virtual*/ LLContextMenu* createMenu() + { + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + LLUUID selected_id = mUUIDs.back(); + + registrar.add("BodyPart.Replace", boost::bind(&LLAppearanceMgr::wearItemOnAvatar, + LLAppearanceMgr::getInstance(), selected_id, true, true)); + registrar.add("BodyPart.Edit", boost::bind(LLAgentWearables::editWearable, selected_id)); + + enable_registrar.add("BodyPart.OnEnable", boost::bind(&CofBodyPartContextMenu::onEnable, this, _2)); + + return createFromFile("menu_cof_body_part.xml"); + } + + bool onEnable(const LLSD& data) + { + std::string param = data.asString(); + LLUUID selected_id = mUUIDs.back(); + + if ("edit" == param) + { + return gAgentWearables.isWearableModifiable(selected_id); + } + + return true; + } +}; + +////////////////////////////////////////////////////////////////////////// + LLCOFWearables::LLCOFWearables() : LLPanel(), mAttachments(NULL), mClothing(NULL), mBodyParts(NULL), mLastSelectedList(NULL) { + mClothingMenu = new CofClothingContextMenu(); + mAttachmentMenu = new CofAttachmentContextMenu(); + mBodyPartMenu = new CofBodyPartContextMenu(); }; +LLCOFWearables::~LLCOFWearables() +{ + delete mClothingMenu; + delete mAttachmentMenu; + delete mBodyPartMenu; +} // virtual BOOL LLCOFWearables::postBuild() @@ -65,6 +185,9 @@ BOOL LLCOFWearables::postBuild() mClothing = getChild<LLFlatListView>("list_clothing"); mBodyParts = getChild<LLFlatListView>("list_body_parts"); + mClothing->setRightMouseDownCallback(boost::bind(&LLCOFWearables::onListRightClick, this, _1, _2, _3, mClothingMenu)); + mAttachments->setRightMouseDownCallback(boost::bind(&LLCOFWearables::onListRightClick, this, _1, _2, _3, mAttachmentMenu)); + mBodyParts->setRightMouseDownCallback(boost::bind(&LLCOFWearables::onListRightClick, this, _1, _2, _3, mBodyPartMenu)); //selection across different list/tabs is not supported mAttachments->setCommitCallback(boost::bind(&LLCOFWearables::onSelectionChange, this, mAttachments)); @@ -304,6 +427,14 @@ LLUUID LLCOFWearables::getSelectedUUID() return mLastSelectedList->getSelectedUUID(); } +bool LLCOFWearables::getSelectedUUIDs(uuid_vec_t& selected_ids) +{ + if (!mLastSelectedList) return false; + + mLastSelectedList->getSelectedUUIDs(selected_ids); + return selected_ids.size() != 0; +} + void LLCOFWearables::clear() { mAttachments->clear(); @@ -311,4 +442,16 @@ void LLCOFWearables::clear() mBodyParts->clear(); } +void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu) +{ + if(menu) + { + uuid_vec_t selected_uuids; + if(getSelectedUUIDs(selected_uuids)) + { + menu->show(ctrl, selected_uuids, x, y); + } + } +} + //EOF diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h index 583ee96247..590aa709dd 100644 --- a/indra/newview/llcofwearables.h +++ b/indra/newview/llcofwearables.h @@ -40,6 +40,7 @@ #include "llappearancemgr.h" #include "llinventorymodel.h" +class LLListContextMenu; class LLPanelClothingListItem; class LLPanelBodyPartsListItem; class LLPanelDeletableWearableListItem; @@ -115,11 +116,12 @@ public: LLCOFWearables(); - virtual ~LLCOFWearables() {}; + virtual ~LLCOFWearables(); /*virtual*/ BOOL postBuild(); LLUUID getSelectedUUID(); + bool getSelectedUUIDs(uuid_vec_t& selected_ids); void refresh(); void clear(); @@ -138,6 +140,8 @@ protected: LLPanelBodyPartsListItem* buildBodypartListItem(LLViewerInventoryItem* item); LLPanelDeletableWearableListItem* buildAttachemntListItem(LLViewerInventoryItem* item); + void onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu); + LLFlatListView* mAttachments; LLFlatListView* mClothing; LLFlatListView* mBodyParts; @@ -146,6 +150,9 @@ protected: LLCOFCallbacks mCOFCallbacks; + LLListContextMenu* mClothingMenu; + LLListContextMenu* mAttachmentMenu; + LLListContextMenu* mBodyPartMenu; }; diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index f61c86db14..1b6ef0e97a 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -266,11 +266,12 @@ private: class LLPreviewedFloater : public LLFloater { public: - LLPreviewedFloater(LLFloaterUIPreview* floater) - : LLFloater(LLSD()), + LLPreviewedFloater(LLFloaterUIPreview* floater, const Params& params) + : LLFloater(LLSD(), params), mFloaterUIPreview(floater) { } + virtual void draw(); BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); BOOL handleToolTip(S32 x, S32 y, MASK mask); @@ -428,6 +429,7 @@ BOOL LLFloaterUIPreview::postBuild() // Double-click opens the floater, for convenience mFileList->setDoubleClickCallback(boost::bind(&LLFloaterUIPreview::onClickDisplayFloater, this, PRIMARY_FLOATER)); + setDefaultBtn("display_floater"); // get pointers to buttons and link to callbacks mLanguageSelection = main_panel_tmp->getChild<LLComboBox>("language_select_combo"); mLanguageSelection->setCommitCallback(boost::bind(&LLFloaterUIPreview::onLanguageComboSelect, this, mLanguageSelection)); @@ -824,7 +826,11 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) return; // ignore click (this can only happen with empty list; otherwise an item is always selected) } - *floaterp = new LLPreviewedFloater(this); + LLFloater::Params p(LLFloater::getDefaultParams()); + p.min_height=p.header_height; + p.min_width=10; + + *floaterp = new LLPreviewedFloater(this, p); if(!strncmp(path.c_str(),"floater_",8) || !strncmp(path.c_str(), "inspect_", 8)) // if it's a floater @@ -874,6 +880,8 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) } else // if it is a panel... { + (*floaterp)->setCanResize(true); + const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); S32 floater_header_size = floater_params.header_height; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 2d27c89074..577652fc79 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -41,7 +41,6 @@ #include "llagentwearables.h" #include "llappearancemgr.h" #include "llavataractions.h" -#include "llfloatercustomize.h" #include "llfloateropenobject.h" #include "llfloaterreg.h" #include "llfloaterworldmap.h" @@ -62,9 +61,11 @@ #include "llpreviewgesture.h" #include "llpreviewtexture.h" #include "llselectmgr.h" +#include "llsidepanelappearance.h" #include "llsidetray.h" #include "lltrans.h" #include "llviewerassettype.h" +#include "llviewermenu.h" #include "llviewermessage.h" #include "llviewerobjectlist.h" #include "llviewerwindow.h" @@ -222,9 +223,7 @@ void LLInvFVBridge::cutToClipboard() // *TODO: make sure this does the right thing void LLInvFVBridge::showProperties() { - LLSD key; - key["id"] = mUUID; - LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + show_item_profile(mUUID); // Disable old properties floater; this is replaced by the sidepanel. /* @@ -4143,21 +4142,9 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action) void LLObjectBridge::openItem() { - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } - - LLSD key; - key["id"] = mUUID; - LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); - - // Disable old properties floater; this is replaced by the sidepanel. - /* - LLFloaterReg::showInstance("properties", mUUID); - */ + // object double-click action is to wear/unwear object + performAction(getInventoryModel(), + get_is_item_worn(mUUID) ? "detach" : "attach"); } LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const @@ -4434,7 +4421,7 @@ void wear_inventory_item_on_avatar( LLInventoryItem* item ) lldebugs << "wear_inventory_item_on_avatar( " << item->getName() << " )" << llendl; - LLAppearanceMgr::instance().addCOFItemLink(item); + LLAppearanceMgr::getInstance()->wearItemOnAvatar(item->getUUID(), true, false); } } @@ -4460,15 +4447,13 @@ void remove_inventory_category_from_avatar( LLInventoryCategory* category ) << " )" << llendl; - if( gFloaterCustomize ) + if (gAgentCamera.cameraCustomizeAvatar()) { - gFloaterCustomize->askToSaveIfDirty( - boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID())); - } - else - { - remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() ); + // switching to outfit editor should automagically save any currently edited wearable + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); } + + remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() ); } struct OnRemoveStruct @@ -4892,19 +4877,12 @@ void LLWearableBridge::onEditOnAvatar(void* user_data) void LLWearableBridge::editOnAvatar() { - LLUUID linked_id = gInventory.getLinkedItemID(mUUID); - const LLWearable* wearable = gAgentWearables.getWearableFromItemID(linked_id); + LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID); if( wearable ) { - // Set the tab to the right wearable. - if (gFloaterCustomize) - gFloaterCustomize->setCurrentWearableType( wearable->getType() ); + LLPanel * panel = LLSideTray::getInstance()->getPanel("sidepanel_appearance"); - if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() ) - { - // Start Avatar Customization - gAgentCamera.changeCameraToCustomizeAvatar(); - } + LLSidepanelAppearance::editWearable(wearable, panel); } } @@ -4983,7 +4961,7 @@ void LLWearableBridge::removeAllClothesFromAvatar() gAgentWearables.getWearableInventoryItem((LLWearableType::EType)itype, index)); if (!item) continue; - const LLUUID &item_id = gInventory.getLinkedItemID(item->getUUID()); + const LLUUID &item_id = item->getUUID(); const LLWearable *wearable = gAgentWearables.getWearableFromItemID(item_id); if (!wearable) continue; diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 2b4d9fb25c..f67d91cfa5 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -52,7 +52,6 @@ #include "llappearancemgr.h" #include "llappviewer.h" //#include "llfirstuse.h" -#include "llfloatercustomize.h" #include "llfocusmgr.h" #include "llfolderview.h" #include "llgesturemgr.h" @@ -74,6 +73,7 @@ #include "llscrollbar.h" #include "llscrollcontainer.h" #include "llselectmgr.h" +#include "llsidetray.h" #include "lltabcontainer.h" #include "lltooldraganddrop.h" #include "lluictrlfactory.h" @@ -160,6 +160,19 @@ BOOL get_is_item_worn(const LLUUID& id) return FALSE; } +void show_item_profile(const LLUUID& item_uuid) +{ + LLUUID linked_uuid = gInventory.getLinkedItemID(item_uuid); + LLSideTray::getInstance()->showPanel("sidepanel_inventory", LLSD().with("id", linked_uuid)); +} + +void show_item_original(const LLUUID& item_uuid) +{ + LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(); + if (!active_panel) return; + active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_NO); +} + ///---------------------------------------------------------------------------- /// LLInventoryCollectFunctor implementations ///---------------------------------------------------------------------------- @@ -343,6 +356,21 @@ bool LLFindWearables::operator()(LLInventoryCategory* cat, return FALSE; } +bool LLFindWearablesOfType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + if (!item) return false; + if (item->getType() != LLAssetType::AT_CLOTHING && + item->getType() != LLAssetType::AT_BODYPART) + { + return false; + } + + LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item); + if (!vitem || vitem->getWearableType() != mWearableType) return false; + + return true; +} + ///---------------------------------------------------------------------------- /// LLAssetIDMatches ///---------------------------------------------------------------------------- diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 79b9b4a9cc..8b96ba29d9 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -46,6 +46,9 @@ // Is this item or its baseitem is worn, attached, etc... BOOL get_is_item_worn(const LLUUID& id); +void show_item_profile(const LLUUID& item_uuid); + +void show_item_original(const LLUUID& item_uuid); void change_item_parent(LLInventoryModel* model, LLViewerInventoryItem* item, @@ -262,6 +265,17 @@ public: LLInventoryItem* item); }; +//Inventory collect functor collecting wearables of a specific wearable type +class LLFindWearablesOfType : public LLInventoryCollectFunctor +{ +public: + LLFindWearablesOfType(LLWearableType::EType type) : mWearableType(type) {} + virtual ~LLFindWearablesOfType() {} + virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item); + + const LLWearableType::EType mWearableType; +}; + /** Inventory Collector Functions ** ** *******************************************************************************/ diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index a527694d25..2e1c5238d3 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -566,6 +566,11 @@ const LLUUID& LLInventoryModel::getLinkedItemID(const LLUUID& object_id) const return item->getLinkedUUID(); } +LLViewerInventoryItem* LLInventoryModel::getLinkedItem(const LLUUID& object_id) const +{ + return object_id.notNull() ? getItem(getLinkedItemID(object_id)) : NULL; +} + LLInventoryModel::item_array_t LLInventoryModel::collectLinkedItems(const LLUUID& id, const LLUUID& start_folder_id) { @@ -1244,7 +1249,11 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category) void LLInventoryModel::addItem(LLViewerInventoryItem* item) { - //llinfos << "LLInventoryModel::addItem()" << llendl; + /* + const LLViewerInventoryCategory* cat = gInventory.getCategory(item->getParentUUID()); // Seraph remove for 2.1 + const std::string cat_name = cat ? cat->getName() : "CAT NOT FOUND"; // Seraph remove for 2.1 + llinfos << "Added item [ name:" << item->getName() << " UUID:" << item->getUUID() << " type:" << item->getActualType() << " ] to folder [ name:" << cat_name << " uuid:" << item->getParentUUID() << " ]" << llendl; // Seraph remove for 2.1 + */ llassert(item); if(item) diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 1f7bd50328..7b56d0bdd1 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -258,6 +258,7 @@ public: // Get the inventoryID or item that this item points to, else just return object_id const LLUUID& getLinkedItemID(const LLUUID& object_id) const; + LLViewerInventoryItem* getLinkedItem(const LLUUID& object_id) const; private: mutable LLPointer<LLViewerInventoryItem> mLastItem; // cache recent lookups diff --git a/indra/newview/lllistcontextmenu.cpp b/indra/newview/lllistcontextmenu.cpp new file mode 100644 index 0000000000..50e969f6bc --- /dev/null +++ b/indra/newview/lllistcontextmenu.cpp @@ -0,0 +1,125 @@ +/** + * @file lllistcontextmenu.cpp + * @brief Base class of misc lists' context menus + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + + +#include "llviewerprecompiledheaders.h" + +#include "lllistcontextmenu.h" + +// libs +#include "llmenugl.h" // for LLContextMenu + +// newview +#include "llviewermenu.h" // for LLViewerMenuHolderGL + +LLListContextMenu::LLListContextMenu() +: mMenu(NULL) +{ +} + +LLListContextMenu::~LLListContextMenu() +{ + // do not forget delete LLContextMenu* mMenu. + // It can have registered Enable callbacks which are called from the LLMenuHolderGL::draw() + // via selected item (menu_item_call) by calling LLMenuItemCallGL::buildDrawLabel. + // we can have a crash via using callbacks of deleted instance of ContextMenu. EXT-4725 + + // menu holder deletes its menus on viewer exit, so we have no way to determine if instance + // of mMenu has already been deleted except of using LLHandle. EXT-4762. + if (!mMenuHandle.isDead()) + { + mMenu->die(); + mMenu = NULL; + } +} + +void LLListContextMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) +{ + if (mMenu) + { + //preventing parent (menu holder) from deleting already "dead" context menus on exit + LLView* parent = mMenu->getParent(); + if (parent) + { + parent->removeChild(mMenu); + } + delete mMenu; + mMenu = NULL; + mUUIDs.clear(); + } + + if ( uuids.empty() ) + { + return; + } + + mUUIDs.resize(uuids.size()); + std::copy(uuids.begin(), uuids.end(), mUUIDs.begin()); + + mMenu = createMenu(); + if (!mMenu) + { + llwarns << "Context menu creation failed" << llendl; + return; + } + + mMenuHandle = mMenu->getHandle(); + mMenu->show(x, y); + LLMenuGL::showPopup(spawning_view, mMenu, x, y); +} + +void LLListContextMenu::hide() +{ + if(mMenu) + { + mMenu->hide(); + } +} + +// static +void LLListContextMenu::handleMultiple(functor_t functor, const uuid_vec_t& ids) +{ + uuid_vec_t::const_iterator it; + for (it = ids.begin(); it != ids.end(); ++it) + { + functor(*it); + } +} + +// static +LLContextMenu* LLListContextMenu::createFromFile(const std::string& filename) +{ + return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>( + filename, LLContextMenu::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); +} + +// EOF diff --git a/indra/newview/lllistcontextmenu.h b/indra/newview/lllistcontextmenu.h new file mode 100644 index 0000000000..09540a833f --- /dev/null +++ b/indra/newview/lllistcontextmenu.h @@ -0,0 +1,84 @@ +/** + * @file lllistcontextmenu.h + * @brief Base class of misc lists' context menus + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLLISTCONTEXTMENU_H +#define LL_LLLISTCONTEXTMENU_H + +#include "llhandle.h" +#include "lluuid.h" +#include "llview.h" + +class LLView; +class LLContextMenu; + +/** + * Context menu for single or multiple list items. + * + * Derived classes must implement contextMenu(). + * + * Typical usage: + * <code> + * my_context_menu->show(parent_view, selected_list_items_ids, x, y); + * </code> + */ +class LLListContextMenu +{ +public: + LLListContextMenu(); + virtual ~LLListContextMenu(); + + /** + * Show the menu at specified coordinates. + * + * @param spawning_view View to spawn at. + * @param uuids An array of list items ids. + * @param x Horizontal coordinate in the spawn_view's coordinate frame. + * @param y Vertical coordinate in the spawn_view's coordinate frame. + */ + virtual void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y); + + virtual void hide(); + +protected: + typedef boost::function<void (const LLUUID& id)> functor_t; + + virtual LLContextMenu* createMenu() = 0; + + static LLContextMenu* createFromFile(const std::string& filename); + static void handleMultiple(functor_t functor, const uuid_vec_t& ids); + + uuid_vec_t mUUIDs; + LLContextMenu* mMenu; + LLHandle<LLView> mMenuHandle; +}; + +#endif // LL_LLLISTCONTEXTMENU_H diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index 27a27fb65a..4c28e98e62 100644 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -42,7 +42,6 @@ #include "lldrawpoolavatar.h" #include "llface.h" //#include "llfirstuse.h" -#include "llfloatercustomize.h" #include "llfloatertools.h" #include "llresmgr.h" #include "lltoolmgr.h" diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 7ebbddca25..17a2db7a43 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -38,11 +38,44 @@ #include "llaccordionctrl.h" #include "llaccordionctrltab.h" +#include "llagentwearables.h" #include "llappearancemgr.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "lllistcontextmenu.h" +#include "lltransutil.h" +#include "llviewermenu.h" +#include "llvoavatar.h" +#include "llvoavatarself.h" #include "llwearableitemslist.h" +////////////////////////////////////////////////////////////////////////// + +class OutfitContextMenu : public LLListContextMenu +{ +protected: + /* virtual */ LLContextMenu* createMenu() + { + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + LLUUID selected_id = mUUIDs.front(); + + registrar.add("Outfit.WearReplace", + boost::bind(&LLAppearanceMgr::replaceCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.WearAdd", + boost::bind(&LLAppearanceMgr::addCategoryToCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.TakeOff", + boost::bind(&LLAppearanceMgr::takeOffOutfit, &LLAppearanceMgr::instance(), selected_id)); + // *TODO: implement this + // registrar.add("Outfit.Rename", boost::bind()); + // registrar.add("Outfit.Delete", boost::bind()); + + return createFromFile("menu_outfit_tab.xml"); + } +}; + +////////////////////////////////////////////////////////////////////////// + static LLRegisterPanelClassWrapper<LLOutfitsList> t_outfits_list("outfits_list"); LLOutfitsList::LLOutfitsList() @@ -55,10 +88,14 @@ LLOutfitsList::LLOutfitsList() gInventory.addObserver(mCategoriesObserver); gInventory.addObserver(this); + + mOutfitMenu = new OutfitContextMenu(); } LLOutfitsList::~LLOutfitsList() { + delete mOutfitMenu; + if (gInventory.containsObserver(mCategoriesObserver)) { gInventory.removeObserver(mCategoriesObserver); @@ -140,6 +177,8 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) static LLXMLNodePtr accordionXmlNode = getAccordionTabXMLNode(); LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL); + tab->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onAccordionTabRightClick, this, + _1, _2, _3, cat_id)); tab->setName(name); tab->setTitle(name); @@ -447,4 +486,19 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring) } } +void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) +{ + LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl); + if(mOutfitMenu && tab && tab->getHeaderVisible() && cat_id.notNull()) + { + S32 header_bottom = tab->getLocalRect().getHeight() - tab->getHeaderHeight(); + if(y >= header_bottom) + { + uuid_vec_t selected_uuids; + selected_uuids.push_back(cat_id); + mOutfitMenu->show(ctrl, selected_uuids, x, y); + } + } +} + // EOF diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index 8eaa39e6f1..b6b3d6ae46 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -41,6 +41,7 @@ class LLAccordionCtrl; class LLAccordionCtrlTab; class LLWearableItemsList; +class LLListContextMenu; /** * @class LLOutfitsList @@ -105,6 +106,8 @@ private: */ void applyFilter(const std::string& new_filter_substring); + void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id); + LLInventoryCategoriesObserver* mCategoriesObserver; LLAccordionCtrl* mAccordion; @@ -118,6 +121,8 @@ private: typedef std::map<LLUUID, LLAccordionCtrlTab*> outfits_map_t; typedef outfits_map_t::value_type outfits_map_value_t; outfits_map_t mOutfitsMap; + + LLListContextMenu* mOutfitMenu; }; #endif //LL_LLOUTFITSLIST_H diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index f8dbc91036..9eccceca66 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -57,6 +57,8 @@ #include "lltextureentry.h" #include "llviewercontrol.h" // gSavedSettings #include "llviewertexturelist.h" +#include "llagentcamera.h" +#include "llmorphview.h" // register panel with appropriate XML static LLRegisterPanelClassWrapper<LLPanelEditWearable> t_edit_wearable("panel_edit_wearable"); @@ -213,7 +215,10 @@ LLEditWearableDictionary::~LLEditWearableDictionary() LLEditWearableDictionary::Wearables::Wearables() { - addEntry(LLWearableType::WT_SHAPE, new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9, SUBPART_SHAPE_HEAD, SUBPART_SHAPE_EYES, SUBPART_SHAPE_EARS, SUBPART_SHAPE_NOSE, SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS, SUBPART_SHAPE_WHOLE)); + // note the subpart that is listed first is treated as "default", regardless of what order is in enum. + // Please match the order presented in XUI. -Nyx + // this will affect what camera angle is shown when first editing a wearable + addEntry(LLWearableType::WT_SHAPE, new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9, SUBPART_SHAPE_WHOLE, SUBPART_SHAPE_HEAD, SUBPART_SHAPE_EYES, SUBPART_SHAPE_EARS, SUBPART_SHAPE_NOSE, SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS )); addEntry(LLWearableType::WT_SKIN, new WearableEntry(LLWearableType::WT_SKIN,"edit_skin_title","skin_desc_text",0,3,4, TEX_HEAD_BODYPAINT, TEX_UPPER_BODYPAINT, TEX_LOWER_BODYPAINT, SUBPART_SKIN_COLOR, SUBPART_SKIN_FACEDETAIL, SUBPART_SKIN_MAKEUP, SUBPART_SKIN_BODYDETAIL)); addEntry(LLWearableType::WT_HAIR, new WearableEntry(LLWearableType::WT_HAIR,"edit_hair_title","hair_desc_text",0,1,4, TEX_HAIR, SUBPART_HAIR_COLOR, SUBPART_HAIR_STYLE, SUBPART_HAIR_EYEBROWS, SUBPART_HAIR_FACIAL)); addEntry(LLWearableType::WT_EYES, new WearableEntry(LLWearableType::WT_EYES,"edit_eyes_title","eyes_desc_text",0,1,1, TEX_EYES_IRIS, SUBPART_EYES)); @@ -643,6 +648,12 @@ BOOL LLPanelEditWearable::postBuild() mWearablePtr = NULL; + configureAlphaCheckbox(LLVOAvatarDefines::TEX_LOWER_ALPHA, "lower alpha texture invisible"); + configureAlphaCheckbox(LLVOAvatarDefines::TEX_UPPER_ALPHA, "upper alpha texture invisible"); + configureAlphaCheckbox(LLVOAvatarDefines::TEX_HEAD_ALPHA, "head alpha texture invisible"); + configureAlphaCheckbox(LLVOAvatarDefines::TEX_EYES_ALPHA, "eye alpha texture invisible"); + configureAlphaCheckbox(LLVOAvatarDefines::TEX_HAIR_ALPHA, "hair alpha texture invisible"); + return TRUE; } @@ -665,11 +676,10 @@ BOOL LLPanelEditWearable::isDirty() const void LLPanelEditWearable::draw() { updateVerbs(); - if (getWearable()) + if (getWearable() && getWearable()->getType() == LLWearableType::WT_SHAPE) { - LLWearableType::EType type = getWearable()->getType(); - updatePanelPickerControls(type); - updateTypeSpecificControls(type); + //updating avatar height + updateTypeSpecificControls(LLWearableType::WT_SHAPE); } LLPanel::draw(); @@ -891,6 +901,70 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show) // Update picker controls state for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2)); for_each_picker_ctrl_entry <LLTextureCtrl> (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2)); + + showDefaultSubpart(); +} + +void LLPanelEditWearable::showDefaultSubpart() +{ + changeCamera(0); +} + +void LLPanelEditWearable::onTabExpandedCollapsed(const LLSD& param, U8 index) +{ + bool expanded = param.asBoolean(); + + if (!mWearablePtr || !gAgentCamera.cameraCustomizeAvatar()) + { + // we don't have a valid wearable we're editing, or we've left the wearable editor + return; + } + + if (expanded) + { + changeCamera(index); + } + +} + +void LLPanelEditWearable::changeCamera(U8 subpart) +{ + const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(mWearablePtr->getType()); + if (!wearable_entry) + { + llinfos << "could not get wearable dictionary entry for wearable type: " << mWearablePtr->getType() << llendl; + return; + } + + if (subpart >= wearable_entry->mSubparts.size()) + { + llinfos << "accordion tab expanded for invalid subpart. Wearable type: " << mWearablePtr->getType() << " subpart num: " << subpart << llendl; + return; + } + + ESubpart subpart_e = wearable_entry->mSubparts[subpart]; + const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e); + + if (!subpart_entry) + { + llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl; + return; + } + + // Update the camera + gMorphView->setCameraDistToDefault(); + gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) ); + gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset ); + gMorphView->setCameraOffset( subpart_entry->mCameraOffset ); + if (gSavedSettings.getBOOL("AppearanceCameraMovement")) + { + gMorphView->updateCamera(); + } +} + +void LLPanelEditWearable::updateScrollingPanelList() +{ + updateScrollingPanelUI(); } void LLPanelEditWearable::initializePanel() @@ -951,6 +1025,9 @@ void LLPanelEditWearable::initializePanel() // what edit group do we want to extract params for? const std::string edit_group = subpart_entry->mEditGroup; + // initialize callback to ensure camera view changes appropriately. + tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index)); + // storage for ordered list of visual params value_map_t sorted_params; getSortedParams(sorted_params, edit_group); @@ -964,7 +1041,15 @@ void LLPanelEditWearable::initializePanel() for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2)); for_each_picker_ctrl_entry <LLTextureCtrl> (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2)); + showDefaultSubpart(); updateVerbs(); + + if (getWearable()) + { + LLWearableType::EType type = getWearable()->getType(); + updatePanelPickerControls(type); + updateTypeSpecificControls(type); + } } void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type) @@ -987,6 +1072,13 @@ void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type) std::string avatar_height_str = llformat("%.2f", gAgentAvatarp->mBodySize.mV[VZ]); mTxtAvatarHeight->setTextArg("[HEIGHT]", avatar_height_str); } + + if (LLWearableType::WT_ALPHA == type) + { + updateAlphaCheckboxes(); + + initPreviousAlphaTextures(); + } } void LLPanelEditWearable::updateScrollingPanelUI() @@ -1166,4 +1258,83 @@ void LLPanelEditWearable::updateVerbs() } +void LLPanelEditWearable::configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name) +{ + LLCheckBoxCtrl* checkbox = mPanelAlpha->getChild<LLCheckBoxCtrl>(name); + checkbox->setCommitCallback(boost::bind(&LLPanelEditWearable::onInvisibilityCommit, this, checkbox, te)); + + mAlphaCheckbox2Index[name] = te; +} + +void LLPanelEditWearable::onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te) +{ + if (!checkbox_ctrl) return; + if (!getWearable()) return; + + llinfos << "onInvisibilityCommit, self " << this << " checkbox_ctrl " << checkbox_ctrl << llendl; + + bool new_invis_state = checkbox_ctrl->get(); + if (new_invis_state) + { + LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te); + mPreviousAlphaTexture[te] = lto->getID(); + + LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( IMG_INVISIBLE ); + U32 index = gAgentWearables.getWearableIndex(getWearable()); + gAgentAvatarp->setLocalTexture(te, image, FALSE, index); + gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE); + } + else + { + // Try to restore previous texture, if any. + LLUUID prev_id = mPreviousAlphaTexture[te]; + if (prev_id.isNull() || (prev_id == IMG_INVISIBLE)) + { + prev_id = LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ); + } + if (prev_id.isNull()) return; + + LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(prev_id); + if (!image) return; + + U32 index = gAgentWearables.getWearableIndex(getWearable()); + gAgentAvatarp->setLocalTexture(te, image, FALSE, index); + gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE); + } + + updatePanelPickerControls(getWearable()->getType()); +} + +void LLPanelEditWearable::updateAlphaCheckboxes() +{ + for(string_texture_index_map_t::iterator iter = mAlphaCheckbox2Index.begin(); + iter != mAlphaCheckbox2Index.end(); ++iter ) + { + LLVOAvatarDefines::ETextureIndex te = (LLVOAvatarDefines::ETextureIndex)iter->second; + LLCheckBoxCtrl* ctrl = mPanelAlpha->getChild<LLCheckBoxCtrl>(iter->first); + if (ctrl) + { + ctrl->set(!gAgentAvatarp->isTextureVisible(te, mWearablePtr)); + } + } +} + +void LLPanelEditWearable::initPreviousAlphaTextures() +{ + initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA); + initPreviousAlphaTextureEntry(TEX_UPPER_ALPHA); + initPreviousAlphaTextureEntry(TEX_HEAD_ALPHA); + initPreviousAlphaTextureEntry(TEX_EYES_ALPHA); + initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA); +} + +void LLPanelEditWearable::initPreviousAlphaTextureEntry(LLVOAvatarDefines::ETextureIndex te) +{ + LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te); + if (lto) + { + mPreviousAlphaTexture[te] = lto->getID(); + } +} + // EOF diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index 04839ca451..b6b8c0c781 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -1,6 +1,6 @@ /** - * @file llfloatercustomize.h - * @brief The customize avatar floater, triggered by "Appearance..." + * @file llpaneleditwearable.h + * @brief A LLPanel dedicated to the editing of wearables. * * $LicenseInfo:firstyear=2009&license=viewergpl$ * @@ -36,8 +36,10 @@ #include "llpanel.h" #include "llscrollingpanellist.h" #include "llmodaldialog.h" +#include "llvoavatardefines.h" #include "llwearabletype.h" +class LLCheckBoxCtrl; class LLWearable; class LLTextEditor; class LLTextBox; @@ -63,9 +65,15 @@ public: void saveChanges(); void revertChanges(); + void showDefaultSubpart(); + void onTabExpandedCollapsed(const LLSD& param, U8 index); + + void updateScrollingPanelList(); + static void onRevertButtonClicked(void* userdata); void onCommitSexChange(); + private: typedef std::map<F32, LLViewerVisualParam*> value_map_t; @@ -84,6 +92,16 @@ private: void toggleTypeSpecificControls(LLWearableType::EType type); void updateTypeSpecificControls(LLWearableType::EType type); + // changes camera angle to default for selected subpart + void changeCamera(U8 subpart); + + //alpha mask checkboxes + void configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name); + void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te); + void updateAlphaCheckboxes(); + void initPreviousAlphaTextures(); + void initPreviousAlphaTextureEntry(LLVOAvatarDefines::ETextureIndex te); + // the pointer to the wearable we're editing. NULL means we're not editing a wearable. LLWearable *mWearablePtr; LLViewerInventoryItem* mWearableItem; @@ -120,6 +138,12 @@ private: LLPanel *mPanelSkirt; LLPanel *mPanelAlpha; LLPanel *mPanelTattoo; + + typedef std::map<std::string, LLVOAvatarDefines::ETextureIndex> string_texture_index_map_t; + string_texture_index_map_t mAlphaCheckbox2Index; + + typedef std::map<LLVOAvatarDefines::ETextureIndex, LLUUID> s32_uuid_map_t; + s32_uuid_map_t mPreviousAlphaTexture; }; #endif diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 7dec2251e8..b356fe6bfd 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1749,8 +1749,7 @@ BOOL LLPanelGroupRolesSubTab::postBuildSubTab(LLView* root) mRoleTitle->setKeystrokeCallback(onPropertiesKey, this); mRoleDescription->setCommitOnFocusLost(TRUE); - mRoleDescription->setCommitCallback(onDescriptionCommit, this); - mRoleDescription->setFocusReceivedCallback(boost::bind(onDescriptionFocus, _1, this)); + mRoleDescription->setKeystrokeCallback(boost::bind(&LLPanelGroupRolesSubTab::onDescriptionKeyStroke, this, _1)); setFooterEnabled(FALSE); @@ -2206,14 +2205,10 @@ void LLPanelGroupRolesSubTab::onPropertiesKey(LLLineEditor* ctrl, void* user_dat self->notifyObservers(); } -// static -void LLPanelGroupRolesSubTab::onDescriptionFocus(LLFocusableElement* ctrl, void* user_data) +void LLPanelGroupRolesSubTab::onDescriptionKeyStroke(LLTextEditor* caller) { - LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data); - if (!self) return; - - self->mHasRoleChange = TRUE; - self->notifyObservers(); + mHasRoleChange = TRUE; + notifyObservers(); } // static diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index 44aa7cea38..cb7941ad9e 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -244,8 +244,9 @@ public: static void onPropertiesKey(LLLineEditor*, void*); + void onDescriptionKeyStroke(LLTextEditor* caller); + static void onDescriptionCommit(LLUICtrl*, void*); - static void onDescriptionFocus(LLFocusableElement*, void*); static void onMemberVisibilityChange(LLUICtrl*, void*); void handleMemberVisibilityChange(bool value); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 5ff51b8165..54d1b46016 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1187,7 +1187,7 @@ void LLPanelMainInventory::setUploadCostIfNeeded() LLMenuItemBranchGL* upload_menu = mMenuAdd->findChild<LLMenuItemBranchGL>("upload"); if(upload_menu) { - S32 upload_cost = -1;//LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); + S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); std::string cost_str; // getPriceUpload() returns -1 if no data available yet. diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 39ade40967..0d3beaa9a5 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -174,11 +174,7 @@ LLInventoryItem* LLTaskInvFVBridge::findItem() const void LLTaskInvFVBridge::showProperties() { - LLSD key; - key["object"] = mPanel->getTaskUUID(); - key["id"] = mUUID; - LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); - + show_item_profile(mUUID); // Disable old properties floater; this is replaced by the sidepanel. /* diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index ceb720908a..ae4b288588 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -212,6 +212,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit() mCOFWearables(NULL), mInventoryItemsPanel(NULL), mCOFObserver(NULL), + mGearMenu(NULL), mCOFDragAndDropObserver(NULL), mInitialized(false) { @@ -254,6 +255,8 @@ BOOL LLPanelOutfitEdit::postBuild() childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL); childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredFolderWearablesPanel, this), NULL); childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredWearablesPanel, this), NULL); + childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); + childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list"); mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onOutfitItemSelectionChange, this)); @@ -692,4 +695,31 @@ bool LLPanelOutfitEdit::switchPanels(LLPanel* switch_from_panel, LLPanel* switch return false; } +void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button) +{ + if(!mGearMenu) + { + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + + registrar.add("Gear.OnClick", boost::bind(&LLPanelOutfitEdit::onGearMenuItemClick, this, _2)); + + mGearMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( + "menu_cof_gear.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); + mGearMenu->buildDrawLabels(); + mGearMenu->updateParent(LLMenuGL::sMenuContainer); + } + + S32 menu_y = mGearMenu->getRect().getHeight() + clicked_button->getRect().getHeight(); + LLMenuGL::showPopup(clicked_button, mGearMenu, 0, menu_y); +} + +void LLPanelOutfitEdit::onGearMenuItemClick(const LLSD& data) +{ + std::string param = data.asString(); + if("add" == param) + { + // TODO + } +} + // EOF diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 5ebe1e0406..1bf69c5606 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -58,6 +58,7 @@ class LLScrollListCtrl; class LLToggleableMenu; class LLFilterEditor; class LLFilteredWearableListManager; +class LLMenuGL; class LLPanelOutfitEdit : public LLPanel { @@ -126,6 +127,8 @@ public: private: + void onGearButtonClick(LLUICtrl* clicked_button); + void onGearMenuItemClick(const LLSD& data); LLTextBox* mCurrentOutfitName; @@ -149,6 +152,7 @@ private: std::vector<LLLookItemType> mLookItemTypes; LLCOFWearables* mCOFWearables; + LLMenuGL* mGearMenu; bool mInitialized; }; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 0760c57f8e..a7e8f497d9 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -383,11 +383,8 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() , _7 // EAcceptance* accept )); - mCommitCallbackRegistrar.add("panel_outfits_inventory_gear_default.Custom.Action", - boost::bind(&LLPanelOutfitsInventory::onCustomAction, this, _2)); - mEnableCallbackRegistrar.add("panel_outfits_inventory_gear_default.Enable", - boost::bind(&LLPanelOutfitsInventory::isActionEnabled, this, _2)); - mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("panel_outfits_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_outfit_gear.xml", + gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); } void LLPanelOutfitsInventory::updateListCommands() diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 862e32cca8..dc1c422ff0 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -42,6 +42,7 @@ #include "llagent.h" #include "llagentdata.h" // for gAgentID #include "llavataractions.h" +#include "llcallingcard.h" // for LLAvatarTracker #include "llviewermenu.h" // for gMenuHolder namespace LLPanelPeopleMenus @@ -49,64 +50,6 @@ namespace LLPanelPeopleMenus NearbyMenu gNearbyMenu; -//== ContextMenu ============================================================== - -ContextMenu::ContextMenu() -: mMenu(NULL) -{ -} - -ContextMenu::~ContextMenu() -{ - // do not forget delete LLContextMenu* mMenu. - // It can have registered Enable callbacks which are called from the LLMenuHolderGL::draw() - // via selected item (menu_item_call) by calling LLMenuItemCallGL::buildDrawLabel. - // we can have a crash via using callbacks of deleted instance of ContextMenu. EXT-4725 - - // menu holder deletes its menus on viewer exit, so we have no way to determine if instance - // of mMenu has already been deleted except of using LLHandle. EXT-4762. - if (!mMenuHandle.isDead()) - { - mMenu->die(); - mMenu = NULL; - } -} - -void ContextMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) -{ - if (mMenu) - { - //preventing parent (menu holder) from deleting already "dead" context menus on exit - LLView* parent = mMenu->getParent(); - if (parent) - { - parent->removeChild(mMenu); - } - delete mMenu; - mMenu = NULL; - mUUIDs.clear(); - } - - if ( uuids.empty() ) - return; - - mUUIDs.resize(uuids.size()); - std::copy(uuids.begin(), uuids.end(), mUUIDs.begin()); - - mMenu = createMenu(); - mMenuHandle = mMenu->getHandle(); - mMenu->show(x, y); - LLMenuGL::showPopup(spawning_view, mMenu, x, y); -} - -void ContextMenu::hide() -{ - if(mMenu) - { - mMenu->hide(); - } -} - //== NearbyMenu =============================================================== LLContextMenu* NearbyMenu::createMenu() @@ -135,8 +78,7 @@ LLContextMenu* NearbyMenu::createMenu() enable_registrar.add("Avatar.CheckItem", boost::bind(&NearbyMenu::checkContextMenuItem, this, _2)); // create the context menu from the XUI - return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>( - "menu_people_nearby.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); + return createFromFile("menu_people_nearby.xml"); } else { @@ -151,9 +93,7 @@ LLContextMenu* NearbyMenu::createMenu() enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem, this, _2)); // create the context menu from the XUI - return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu> - ("menu_people_nearby_multiselect.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); - + return createFromFile("menu_people_nearby_multiselect.xml"); } } diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 8e12710afc..e1f8790135 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -33,42 +33,15 @@ #ifndef LL_LLPANELPEOPLEMENUS_H #define LL_LLPANELPEOPLEMENUS_H -#include "llavatarlistitem.h" +#include "lllistcontextmenu.h" namespace LLPanelPeopleMenus { /** - * Base context menu. - */ -class ContextMenu : public LLAvatarListItem::ContextMenu -{ -public: - ContextMenu(); - virtual ~ContextMenu(); - - /** - * Show the menu at specified coordinates. - * - * @param uuids - an array of avatar or group ids - */ - /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y); - - virtual void hide(); - -protected: - - virtual LLContextMenu* createMenu() = 0; - - uuid_vec_t mUUIDs; - LLContextMenu* mMenu; - LLHandle<LLView> mMenuHandle; -}; - -/** * Menu used in the nearby people list. */ -class NearbyMenu : public ContextMenu +class NearbyMenu : public LLListContextMenu { public: /*virtual*/ LLContextMenu* createMenu(); diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index 1f2be63dc2..87e7044222 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -47,6 +47,7 @@ class LLFlatListView; class LLTeleportHistoryPanel : public LLPanelPlacesTab { public: + // *TODO: derive from LLListContextMenu? class ContextMenu { public: diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 1117ae05d7..b975536f8b 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -648,8 +648,7 @@ LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu() enable_registrar.add("ParticipantList.CheckItem", boost::bind(&LLParticipantList::LLParticipantListMenu::checkContextMenuItem, this, _2)); // create the context menu from the XUI - LLContextMenu* main_menu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>( - "menu_participant_list.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); + LLContextMenu* main_menu = createFromFile("menu_participant_list.xml"); // Don't show sort options for P2P chat bool is_sort_visible = (mParent.mAvatarList && mParent.mAvatarList->size() > 1); @@ -666,10 +665,10 @@ LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu() void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) { - LLPanelPeopleMenus::ContextMenu::show(spawning_view, uuids, x, y); - if (uuids.size() == 0) return; + LLListContextMenu::show(spawning_view, uuids, x, y); + const LLUUID& speaker_id = mUUIDs.front(); BOOL is_muted = isMuted(speaker_id); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index abaf503868..967c8b78cf 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -32,8 +32,8 @@ #include "llviewerprecompiledheaders.h" #include "llevent.h" -#include "llpanelpeoplemenus.h" #include "llavatarlist.h" // for LLAvatarItemRecentSpeakerComparator +#include "lllistcontextmenu.h" class LLSpeakerMgr; class LLAvatarList; @@ -148,7 +148,7 @@ class LLParticipantList /** * Menu used in the participant list. */ - class LLParticipantListMenu : public LLPanelPeopleMenus::ContextMenu + class LLParticipantListMenu : public LLListContextMenu { public: LLParticipantListMenu(LLParticipantList& parent):mParent(parent){}; diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index a5518d87d4..242af6981c 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -73,9 +73,9 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param F32 min_weight = param->getMinWeight(); F32 max_weight = param->getMaxWeight(); - mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), min_weight); + mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), wearable, min_weight); pos_x = getChild<LLViewBorder>("right_border")->getRect().mLeft + left_border->getBorderWidth(); - mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), max_weight ); + mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), wearable, max_weight ); mHintMin->setAllowsUpdates( FALSE ); mHintMax->setAllowsUpdates( FALSE ); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 010d593b27..3719313c14 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -344,10 +344,10 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we // Toggle panel visibility. mEditWearable->setVisible(visible); - mEditWearable->setWearable(wearable); if (visible) { + mEditWearable->setWearable(wearable); mEditWearable->onOpen(LLSD()); // currently no-op, just for consistency if (!disable_camera_switch && gSavedSettings.getBOOL("AppearanceCameraMovement") ) { @@ -465,3 +465,19 @@ void LLSidepanelAppearance::setWearablesLoading(bool val) childSetVisible("wearables_loading_indicator", val); childSetVisible("edit_outfit_btn", !val); } + +void LLSidepanelAppearance::showDefaultSubpart() +{ + if (mEditWearable->getVisible()) + { + mEditWearable->showDefaultSubpart(); + } +} + +void LLSidepanelAppearance::updateScrollingPanelList() +{ + if (mEditWearable->getVisible()) + { + mEditWearable->updateScrollingPanelList(); + } +} diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index 12303b6e96..5bde962c8d 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -67,6 +67,8 @@ public: void showOutfitEditPanel(); void showWearableEditPanel(LLWearable *wearable = NULL); void setWearablesLoading(bool val); + void showDefaultSubpart(); + void updateScrollingPanelList(); private: void onFilterEdit(const std::string& search_string); diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 6ebe55e362..e76397671b 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -125,10 +125,8 @@ BOOL LLSidepanelTaskInfo::postBuild() return TRUE; } -// virtual -void LLSidepanelTaskInfo::setVisible(BOOL visible) +/*virtual*/ void LLSidepanelTaskInfo::handleVisibilityChange ( BOOL visible ) { - LLPanel::setVisible(visible); if (visible) { sActivePanel = this; @@ -137,9 +135,12 @@ void LLSidepanelTaskInfo::setVisible(BOOL visible) else { sActivePanel = NULL; + // drop selection reference + mObjectSelection = NULL; } } + void LLSidepanelTaskInfo::disableAll() { childSetEnabled("perm_modify", FALSE); diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h index e41627435f..15274c90db 100644 --- a/indra/newview/llsidepaneltaskinfo.h +++ b/indra/newview/llsidepaneltaskinfo.h @@ -54,7 +54,7 @@ public: virtual ~LLSidepanelTaskInfo(); /*virtual*/ BOOL postBuild(); - /*virtual*/ void setVisible(BOOL visible); + /*virtual*/ void handleVisibilityChange ( BOOL new_visibility ); void setObjectSelection(LLObjectSelectionHandle selection); diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index c8bb4aa983..9da3db3032 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -529,6 +529,7 @@ BOOL LLSpeakerMgr::isVoiceActive() // LLIMSpeakerMgr // LLIMSpeakerMgr::LLIMSpeakerMgr(LLVoiceChannel* channel) : LLSpeakerMgr(channel) +, mVoiceModerated(false) { } @@ -783,21 +784,33 @@ void LLIMSpeakerMgr::moderateVoiceOtherParticipants(const LLUUID& excluded_avata */ mReverseVoiceModeratedAvatarID = excluded_avatar_id; - moderateVoiceSession(getSessionID(), !unmute_everyone_else); + + + if (mVoiceModerated == !unmute_everyone_else) + { + // session already in requested state. Just force participants which do not match it. + forceVoiceModeratedMode(mVoiceModerated); + } + else + { + // otherwise set moderated mode for a whole session. + moderateVoiceSession(getSessionID(), !unmute_everyone_else); + } } void LLIMSpeakerMgr::processSessionUpdate(const LLSD& session_update) { - if (mReverseVoiceModeratedAvatarID.isNull()) return; - if (session_update.has("moderated_mode") && session_update["moderated_mode"].has("voice")) { - BOOL voice_moderated = session_update["moderated_mode"]["voice"]; + mVoiceModerated = session_update["moderated_mode"]["voice"]; - moderateVoiceParticipant(mReverseVoiceModeratedAvatarID, voice_moderated); + if (mReverseVoiceModeratedAvatarID.notNull()) + { + moderateVoiceParticipant(mReverseVoiceModeratedAvatarID, mVoiceModerated); - mReverseVoiceModeratedAvatarID = LLUUID::null; + mReverseVoiceModeratedAvatarID = LLUUID::null; + } } } @@ -817,6 +830,20 @@ void LLIMSpeakerMgr::moderateVoiceSession(const LLUUID& session_id, bool disallo LLHTTPClient::post(url, data, new ModerationResponder(session_id)); } +void LLIMSpeakerMgr::forceVoiceModeratedMode(bool should_be_muted) +{ + for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it) + { + LLUUID speaker_id = speaker_it->first; + LLSpeaker* speakerp = speaker_it->second; + + // participant does not match requested state + if (should_be_muted != (bool)speakerp->mModeratorMutedVoice) + { + moderateVoiceParticipant(speaker_id, !should_be_muted); + } + } +} // // LLActiveSpeakerMgr diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index 2bb160b7ce..b38acb7bc4 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -303,7 +303,15 @@ protected: void moderateVoiceSession(const LLUUID& session_id, bool disallow_voice); + /** + * Process all participants to mute/unmute them according to passed voice session state. + */ + void forceVoiceModeratedMode(bool should_be_muted); + +private: LLUUID mReverseVoiceModeratedAvatarID; + bool mVoiceModerated; + }; class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeakerMgr> diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 7022d83868..36b8d5b593 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -225,6 +225,7 @@ extern S32 gStartImageHeight; static bool gGotUseCircuitCodeAck = false; static std::string sInitialOutfit; static std::string sInitialOutfitGender; // "male" or "female" +static boost::signals2::connection sWearablesLoadedCon; static bool gUseCircuitCallbackCalled = false; @@ -2430,6 +2431,8 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, } else { + sWearablesLoadedCon = gAgentWearables.addLoadedCallback(LLStartUp::saveInitialOutfit); + bool do_copy = true; bool do_append = false; LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); @@ -2475,6 +2478,24 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, } +//static +void LLStartUp::saveInitialOutfit() +{ + if (sInitialOutfit.empty()) return; + + if (sWearablesLoadedCon.connected()) + { + sWearablesLoadedCon.disconnect(); + } + + LLAppearanceMgr::getInstance()->makeNewOutfitLinks(sInitialOutfit); +} + +std::string& LLStartUp::getInitialOutfitName() +{ + return sInitialOutfit; +} + // Loads a bitmap to display during load void init_start_screen(S32 location_id) { diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 16cc74504f..e1e108ca6a 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -102,6 +102,10 @@ public: static void loadInitialOutfit( const std::string& outfit_folder_name, const std::string& gender_name ); + //save loaded initial outfit into My Outfits category + static void saveInitialOutfit(); + + static std::string& getInitialOutfitName(); static bool dispatchURL(); // if we have a SLURL or sim string ("Ahern/123/45") that started diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 337627cc79..4be03596f8 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -237,7 +237,7 @@ BOOL LLTexLayerSetBuffer::render() { if (mTexLayerSet->isVisible()) { - mTexLayerSet->getAvatar()->bakedTextureUpload(mTexLayerSet->getBakedTexIndex(), FALSE); // FALSE for start of upload, TRUE for finish. + mTexLayerSet->getAvatar()->debugBakedTextureUpload(mTexLayerSet->getBakedTexIndex(), FALSE); // FALSE for start of upload, TRUE for finish. readBackAndUpload(); } else diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index 22176c037f..c1dc1de5e5 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -49,7 +49,6 @@ #include "lldrawable.h" #include "lldrawpoolavatar.h" #include "llface.h" -#include "llfloatercustomize.h" #include "llmorphview.h" #include "llresmgr.h" #include "llselectmgr.h" @@ -79,6 +78,7 @@ LLVisualParamHint::LLVisualParamHint( S32 width, S32 height, LLViewerJointMesh *mesh, LLViewerVisualParam *param, + LLWearable *wearable, F32 param_weight) : LLViewerDynamicTexture(width, height, 3, LLViewerDynamicTexture::ORDER_MIDDLE, TRUE ), @@ -86,6 +86,7 @@ LLVisualParamHint::LLVisualParamHint( mIsVisible( FALSE ), mJointMesh( mesh ), mVisualParam( param ), + mWearablePtr( wearable ), mVisualParamWeight( param_weight ), mAllowsUpdates( TRUE ), mDelayFrames( 0 ), @@ -151,7 +152,7 @@ BOOL LLVisualParamHint::needsRender() void LLVisualParamHint::preRender(BOOL clear_depth) { mLastParamWeight = mVisualParam->getWeight(); - mVisualParam->setWeight(mVisualParamWeight, FALSE); + mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE); gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE); gAgentAvatarp->setVisualParamWeight("Blink_Left", 0.f); gAgentAvatarp->setVisualParamWeight("Blink_Right", 0.f); @@ -250,10 +251,12 @@ BOOL LLVisualParamHint::render() gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); - mVisualParam->setWeight(mLastParamWeight, FALSE); + mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight, FALSE); + gAgentAvatarp->updateVisualParams(); gGL.color4f(1,1,1,1); mGLTexturep->setGLTextureCreated(true); gGL.popUIMatrix(); + return TRUE; } diff --git a/indra/newview/lltoolmorph.h b/indra/newview/lltoolmorph.h index c332c296bd..3bffefaa55 100644 --- a/indra/newview/lltoolmorph.h +++ b/indra/newview/lltoolmorph.h @@ -62,6 +62,7 @@ public: S32 width, S32 height, LLViewerJointMesh *mesh, LLViewerVisualParam *param, + LLWearable *wearable, F32 param_weight); /*virtual*/ S8 getType() const ; @@ -89,6 +90,7 @@ protected: BOOL mIsVisible; // is this distortion hint visible? LLViewerJointMesh* mJointMesh; // mesh that this distortion applies to LLViewerVisualParam* mVisualParam; // visual param applied by this hint + LLWearable* mWearablePtr; // wearable we're editing F32 mVisualParamWeight; // weight for this visual parameter BOOL mAllowsUpdates; // updates are blocked unless this is true S32 mDelayFrames; // updates are blocked for this many frames diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index f0532d5a31..f8b6435614 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -61,9 +61,9 @@ #include "llviewerwindow.h" #include "lltrans.h" #include "llappearancemgr.h" -#include "llfloatercustomize.h" #include "llcommandhandler.h" #include "llviewermessage.h" +#include "llsidepanelappearance.h" ///---------------------------------------------------------------------------- /// Helper class to store special inventory item names @@ -880,12 +880,14 @@ void WearOnAvatarCallback::fire(const LLUUID& inv_item) void ModifiedCOFCallback::fire(const LLUUID& inv_item) { LLAppearanceMgr::instance().updateAppearanceFromCOF(); - if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() ) + // TODO: camera mode may not be changed if a debug setting is tweaked + if( gAgentCamera.cameraCustomizeAvatar() ) { // If we're in appearance editing mode, the current tab may need to be refreshed - if (gFloaterCustomize) + LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); + if (panel) { - gFloaterCustomize->switchToDefaultSubpart(); + panel->showDefaultSubpart(); } } } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 7429a49ccf..e5c5a607dd 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1937,7 +1937,7 @@ void LLViewerMediaImpl::updateVolume() // attenuated_volume = 1 / (roll_off_rate * (d - min))^2 // the +1 is there so that for distance 0 the volume stays the same F64 adjusted_distance = mProximityCamera - gSavedSettings.getF32("MediaRollOffMin"); - F64 attenuation = gSavedSettings.getF32("MediaRollOffRate") * adjusted_distance; + F64 attenuation = 1.0 + (gSavedSettings.getF32("MediaRollOffRate") * adjusted_distance); attenuation = 1.0 / (attenuation * attenuation); // the attenuation multiplier should never be more than one since that would increase volume volume = volume * llmin(1.0, attenuation); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 10ceab2656..69352e6685 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -54,7 +54,6 @@ #include "llfloaterbuy.h" #include "llfloaterbuycontents.h" #include "llbuycurrencyhtml.h" -#include "llfloatercustomize.h" #include "llfloatergodtools.h" #include "llfloaterinventory.h" #include "llfloaterland.h" @@ -108,6 +107,7 @@ #include "lluilistener.h" #include "llappearancemgr.h" #include "lltrans.h" +#include "lleconomy.h" using namespace LLVOAvatarDefines; @@ -3735,17 +3735,15 @@ void reset_view_final( BOOL proceed ); void handle_reset_view() { - if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode()) && gFloaterCustomize ) + if (gAgentCamera.cameraCustomizeAvatar()) { - // Show dialog box if needed. - gFloaterCustomize->askToSaveIfDirty( reset_view_final ); - } - else - { - gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); - reset_view_final( TRUE ); - LLFloaterCamera::resetCameraMode(); + // switching to outfit selector should automagically save any currently edited wearable + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "my_outfits")); } + + gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); + reset_view_final( TRUE ); + LLFloaterCamera::resetCameraMode(); } class LLViewResetView : public view_listener_t @@ -7658,6 +7656,42 @@ class LLWorldToggleCameraControls : public view_listener_t } }; +class LLUploadCostCalculator : public view_listener_t +{ + std::string mCostStr; + + bool handleEvent(const LLSD& userdata) + { + std::string menu_name = userdata.asString(); + gMenuHolder->childSetLabelArg(menu_name, "[COST]", mCostStr); + + return true; + } + + void calculateCost(); + +public: + LLUploadCostCalculator() + { + calculateCost(); + } +}; + +void LLUploadCostCalculator::calculateCost() +{ + S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); + + // getPriceUpload() returns -1 if no data available yet. + if(upload_cost >= 0) + { + mCostStr = llformat("%d", upload_cost); + } + else + { + mCostStr = llformat("%d", gSavedSettings.getU32("DefaultUploadCost")); + } +} + void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y) { static LLMenuGL* show_navbar_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_hide_navbar.xml", @@ -7699,6 +7733,8 @@ void initialize_menus() enable.add("IsGodCustomerService", boost::bind(&is_god_customer_service)); enable.add("IsGodCustomerService", boost::bind(&is_god_customer_service)); + view_listener_t::addEnable(new LLUploadCostCalculator(), "Upload.CalculateCosts"); + // Agent commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying)); enable.add("Agent.enableFlying", boost::bind(&LLAgent::enableFlying)); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index d925ab0d90..d8a9ce9374 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1893,6 +1893,12 @@ bool LLViewerFetchedTexture::updateFetch() h = mGLTexturep->getHeight(0); c = mComponents; } + + const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); + if (override_tex_discard_level != 0) + { + desired_discard = override_tex_discard_level; + } // bypass texturefetch directly by pulling from LLTextureCache bool fetch_request_created = false; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index e0463e3c4a..da4ff1568b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -106,7 +106,6 @@ #include "llfloaterbuildoptions.h" #include "llfloaterbuyland.h" #include "llfloatercamera.h" -#include "llfloatercustomize.h" #include "llfloaterland.h" #include "llfloaterinspect.h" #include "llfloatermap.h" @@ -3017,6 +3016,12 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window) new_world_rect.mTop = llround((F32)new_world_rect.mTop * mDisplayScale.mV[VY]); } + if (gSavedSettings.getBOOL("SidebarCameraMovement") == FALSE) + { + // use right edge of window, ignoring sidebar + new_world_rect.mRight = mWindowRectRaw.mRight; + } + if (mWorldViewRectRaw != new_world_rect) { mWorldViewRectRaw = new_world_rect; @@ -4545,7 +4550,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message) gResizeScreenTexture = TRUE; - if (gFloaterCustomize && gFloaterCustomize->getVisible()) + if (gAgentCamera.cameraCustomizeAvatar()) { LLVisualParamHint::requestHintUpdates(); } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4371396629..5d3c64f590 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -95,6 +95,12 @@ #include "llvoiceclient.h" #include "llvoicevisualizer.h" // Ventrella +#include "lldebugmessagebox.h" +extern F32 SPEED_ADJUST_MAX; +extern F32 SPEED_ADJUST_MAX_SEC; +extern F32 ANIM_SPEED_MAX; +extern F32 ANIM_SPEED_MIN; + #if LL_MSVC // disable boost::lexical_cast warning #pragma warning (disable:4702) @@ -1138,6 +1144,17 @@ void LLVOAvatar::initClass() { llerrs << "Error parsing skeleton node in avatar XML file: " << skeleton_path << llendl; } + + gAnimLibrary.animStateSetString(ANIM_AGENT_BODY_NOISE,"body_noise"); + gAnimLibrary.animStateSetString(ANIM_AGENT_BREATHE_ROT,"breathe_rot"); + gAnimLibrary.animStateSetString(ANIM_AGENT_EDITING,"editing"); + gAnimLibrary.animStateSetString(ANIM_AGENT_EYE,"eye"); + gAnimLibrary.animStateSetString(ANIM_AGENT_FLY_ADJUST,"fly_adjust"); + gAnimLibrary.animStateSetString(ANIM_AGENT_HAND_MOTION,"hand_motion"); + gAnimLibrary.animStateSetString(ANIM_AGENT_HEAD_ROT,"head_rot"); + gAnimLibrary.animStateSetString(ANIM_AGENT_PELVIS_FIX,"pelvis_fix"); + gAnimLibrary.animStateSetString(ANIM_AGENT_TARGET,"target"); + gAnimLibrary.animStateSetString(ANIM_AGENT_WALK_ADJUST,"walk_adjust"); } @@ -1249,7 +1266,11 @@ void LLVOAvatar::initInstance(void) registerMotion( ANIM_AGENT_EXPRESS_TOOTHSMILE, LLEmote::create ); registerMotion( ANIM_AGENT_EXPRESS_WINK, LLEmote::create ); registerMotion( ANIM_AGENT_EXPRESS_WORRY, LLEmote::create ); + registerMotion( ANIM_AGENT_FEMALE_RUN_NEW, LLKeyframeWalkMotion::create ); + registerMotion( ANIM_AGENT_FEMALE_WALK, LLKeyframeWalkMotion::create ); + registerMotion( ANIM_AGENT_FEMALE_WALK_NEW, LLKeyframeWalkMotion::create ); registerMotion( ANIM_AGENT_RUN, LLKeyframeWalkMotion::create ); + registerMotion( ANIM_AGENT_RUN_NEW, LLKeyframeWalkMotion::create ); registerMotion( ANIM_AGENT_STAND, LLKeyframeStandMotion::create ); registerMotion( ANIM_AGENT_STAND_1, LLKeyframeStandMotion::create ); registerMotion( ANIM_AGENT_STAND_2, LLKeyframeStandMotion::create ); @@ -1259,6 +1280,7 @@ void LLVOAvatar::initInstance(void) registerMotion( ANIM_AGENT_TURNLEFT, LLKeyframeWalkMotion::create ); registerMotion( ANIM_AGENT_TURNRIGHT, LLKeyframeWalkMotion::create ); registerMotion( ANIM_AGENT_WALK, LLKeyframeWalkMotion::create ); + registerMotion( ANIM_AGENT_WALK_NEW, LLKeyframeWalkMotion::create ); // motions without a start/stop bit registerMotion( ANIM_AGENT_BODY_NOISE, LLBodyNoiseMotion::create ); @@ -2156,6 +2178,33 @@ static LLFastTimer::DeclareTimer FTM_AVATAR_UPDATE("Update Avatar"); static LLFastTimer::DeclareTimer FTM_JOINT_UPDATE("Update Joints"); //------------------------------------------------------------------------ +// LLVOAvatar::dumpAnimationState() +//------------------------------------------------------------------------ +void LLVOAvatar::dumpAnimationState() +{ + llinfos << "==============================================" << llendl; + for (LLVOAvatar::AnimIterator it = mSignaledAnimations.begin(); it != mSignaledAnimations.end(); ++it) + { + LLUUID id = it->first; + std::string playtag = ""; + if (mPlayingAnimations.find(id) != mPlayingAnimations.end()) + { + playtag = "*"; + } + llinfos << gAnimLibrary.animationName(id) << playtag << llendl; + } + for (LLVOAvatar::AnimIterator it = mPlayingAnimations.begin(); it != mPlayingAnimations.end(); ++it) + { + LLUUID id = it->first; + bool is_signaled = mSignaledAnimations.find(id) != mSignaledAnimations.end(); + if (!is_signaled) + { + llinfos << gAnimLibrary.animationName(id) << "!S" << llendl; + } + } +} + +//------------------------------------------------------------------------ // idleUpdate() //------------------------------------------------------------------------ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) @@ -2258,6 +2307,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) idleUpdateNameTag( root_pos_last ); idleUpdateRenderCost(); idleUpdateTractorBeam(); + return TRUE; } @@ -4434,34 +4484,79 @@ void LLVOAvatar::resetAnimations() flushAllMotions(); } -//----------------------------------------------------------------------------- -// startMotion() -// id is the asset if of the animation to start -// time_offset is the offset into the animation at which to start playing -//----------------------------------------------------------------------------- -BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset) +// Override selectively based on avatar sex and whether we're using new +// animations. +LLUUID LLVOAvatar::remapMotionID(const LLUUID& id) { - LLMemType mt(LLMemType::MTYPE_AVATAR); - + BOOL use_new_walk_run = gSavedSettings.getBOOL("UseNewWalkRun"); + LLUUID result = id; + // start special case female walk for female avatars if (getSex() == SEX_FEMALE) { if (id == ANIM_AGENT_WALK) { - return LLCharacter::startMotion(ANIM_AGENT_FEMALE_WALK, time_offset); + if (use_new_walk_run) + result = ANIM_AGENT_FEMALE_WALK_NEW; + else + result = ANIM_AGENT_FEMALE_WALK; + } + else if (id == ANIM_AGENT_RUN) + { + // There is no old female run animation, so only override + // in one case. + if (use_new_walk_run) + result = ANIM_AGENT_FEMALE_RUN_NEW; } else if (id == ANIM_AGENT_SIT) { - return LLCharacter::startMotion(ANIM_AGENT_SIT_FEMALE, time_offset); + result = ANIM_AGENT_SIT_FEMALE; } } + else + { + // Male avatar. + if (id == ANIM_AGENT_WALK) + { + if (use_new_walk_run) + result = ANIM_AGENT_WALK_NEW; + } + else if (id == ANIM_AGENT_RUN) + { + if (use_new_walk_run) + result = ANIM_AGENT_RUN_NEW; + } + + } - if (isSelf() && id == ANIM_AGENT_AWAY) + return result; + +} + +//----------------------------------------------------------------------------- +// startMotion() +// id is the asset if of the animation to start +// time_offset is the offset into the animation at which to start playing +//----------------------------------------------------------------------------- +BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset) +{ + LLMemType mt(LLMemType::MTYPE_AVATAR); + + lldebugs << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << llendl; + + LLUUID remap_id = remapMotionID(id); + + if (remap_id != id) + { + lldebugs << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << llendl; + } + + if (isSelf() && remap_id == ANIM_AGENT_AWAY) { gAgent.setAFK(); } - return LLCharacter::startMotion(id, time_offset); + return LLCharacter::startMotion(remap_id, time_offset); } //----------------------------------------------------------------------------- @@ -4469,21 +4564,21 @@ BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset) //----------------------------------------------------------------------------- BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate) { - if (isSelf()) - { - gAgent.onAnimStop(id); - } + lldebugs << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << llendl; - if (id == ANIM_AGENT_WALK) + LLUUID remap_id = remapMotionID(id); + + if (remap_id != id) { - LLCharacter::stopMotion(ANIM_AGENT_FEMALE_WALK, stop_immediate); + lldebugs << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << llendl; } - else if (id == ANIM_AGENT_SIT) + + if (isSelf()) { - LLCharacter::stopMotion(ANIM_AGENT_SIT_FEMALE, stop_immediate); + gAgent.onAnimStop(remap_id); } - return LLCharacter::stopMotion(id, stop_immediate); + return LLCharacter::stopMotion(remap_id, stop_immediate); } //----------------------------------------------------------------------------- @@ -7887,3 +7982,26 @@ BOOL LLVOAvatar::isTextureDefined(LLVOAvatarDefines::ETextureIndex te, U32 index getImage(te, index)->getID() != IMG_DEFAULT); } +//virtual +BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index) const +{ + if (isIndexLocalTexture(type)) + { + return isTextureDefined(type, index); + } + else + { + // baked textures can use TE images directly + return ((isTextureDefined(type) || isSelf()) + && (getTEImage(type)->getID() != IMG_INVISIBLE + || LLDrawPoolAlpha::sShowDebugAlpha)); + } +} + +//virtual +BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const +{ + // non-self avatars don't have wearables + return FALSE; +} + diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 86a7cdae02..34791cf823 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -158,12 +158,14 @@ public: virtual LLJoint* getCharacterJoint(U32 num); virtual BOOL allocateCharacterJoints(U32 num); + virtual LLUUID remapMotionID(const LLUUID& id); virtual BOOL startMotion(const LLUUID& id, F32 time_offset = 0.f); virtual BOOL stopMotion(const LLUUID& id, BOOL stop_immediate = FALSE); virtual void stopMotionFromSource(const LLUUID& source_id); virtual void requestStopMotion(LLMotion* motion); LLMotion* findMotion(const LLUUID& id) const; void startDefaultMotions(); + void dumpAnimationState(); virtual LLJoint* getJoint(const std::string &name); virtual LLJoint* getRootJoint() { return &mRoot; } @@ -462,7 +464,9 @@ public: //-------------------------------------------------------------------- public: virtual BOOL isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const; - BOOL isTextureVisible(LLVOAvatarDefines::ETextureIndex index) const; + virtual BOOL isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const; + virtual BOOL isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const; + protected: BOOL isFullyBaked(); static BOOL areAllNearbyInstancesBaked(S32& grey_avatars); @@ -1039,14 +1043,4 @@ protected: // Shared with LLVOAvatarSelf }; // LLVOAvatar -//------------------------------------------------------------------------ -// Inlines -//------------------------------------------------------------------------ -inline BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex te) const -{ - return ((isTextureDefined(te) || isSelf()) - && (getTEImage(te)->getID() != IMG_INVISIBLE - || LLDrawPoolAlpha::sShowDebugAlpha)); -} - #endif // LL_VO_AVATAR_H diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index c82de73f25..203ab45cf4 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -137,7 +137,9 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id, mRegionCrossingCount(0) { gAgentWearables.setAvatarObject(this); - + + mMotionController.mIsSelf = TRUE; + lldebugs << "Marking avatar as self " << id << llendl; } @@ -157,14 +159,14 @@ void LLVOAvatarSelf::initInstance() { for (U32 j = 0; j <= MAX_DISCARD_LEVEL; ++j) { - mTextureLoadTimes[i][j] = -1.0f; + mDebugTextureLoadTimes[i][j] = -1.0f; } } for (U32 i =0; i < LLVOAvatarDefines::BAKED_NUM_INDICES; ++i) { - mBakedTextureTimes[i][0] = -1.0f; - mBakedTextureTimes[i][1] = -1.0f; + mDebugBakedTextureTimes[i][0] = -1.0f; + mDebugBakedTextureTimes[i][1] = -1.0f; } status &= buildMenus(); @@ -1271,6 +1273,8 @@ BOOL LLVOAvatarSelf::isLocalTextureDataAvailable(const LLTexLayerSet* layerset) //----------------------------------------------------------------------------- BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) const { + const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); + for (U32 i = 0; i < mBakedTextureDatas.size(); i++) { if (layerset == mBakedTextureDatas[i].mTexLayerSet) @@ -1285,7 +1289,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type); for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++) { - if (getLocalDiscardLevel(*local_tex_iter, wearable_index) != 0) + if (getLocalDiscardLevel(*local_tex_iter, wearable_index) > (S32)(override_tex_discard_level)) { return FALSE; } @@ -1330,6 +1334,32 @@ BOOL LLVOAvatarSelf::isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 return isDefined; } +//virtual +BOOL LLVOAvatarSelf::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index) const +{ + if (isIndexBakedTexture(type)) + { + return LLVOAvatar::isTextureVisible(type, (U32)0); + } + + LLUUID tex_id = getLocalTextureID(type,index); + return (tex_id != IMG_INVISIBLE) + || (LLDrawPoolAlpha::sShowDebugAlpha); +} + +//virtual +BOOL LLVOAvatarSelf::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const +{ + if (isIndexBakedTexture(type)) + { + return LLVOAvatar::isTextureVisible(type); + } + + U32 index = gAgentWearables.getWearableIndex(wearable); + return isTextureVisible(type,index); +} + + //----------------------------------------------------------------------------- // requestLayerSetUploads() //----------------------------------------------------------------------------- @@ -1761,12 +1791,12 @@ BOOL LLVOAvatarSelf::getIsCloud() } /*static*/ -void LLVOAvatarSelf::onTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata) +void LLVOAvatarSelf::debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata) { - gAgentAvatarp->timingLocalTexLoaded(success, src_vi, src, aux_src, discard_level, final, userdata); + gAgentAvatarp->debugTimingLocalTexLoaded(success, src_vi, src, aux_src, discard_level, final, userdata); } -void LLVOAvatarSelf::timingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata) +void LLVOAvatarSelf::debugTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata) { LLAvatarTexData *data = (LLAvatarTexData *)userdata; if (!data) @@ -1776,14 +1806,14 @@ void LLVOAvatarSelf::timingLocalTexLoaded(BOOL success, LLViewerFetchedTexture * ETextureIndex index = data->mIndex; -if (index < 0 || index >= TEX_NUM_INDICES) + if (index < 0 || index >= TEX_NUM_INDICES) { return; } if (discard_level >=0 && discard_level <= MAX_DISCARD_LEVEL) // ignore discard level -1, as it means we have no data. { - mTextureLoadTimes[(U32)index][(U32)discard_level] = mDebugSelfLoadTimer.getElapsedTimeF32(); + mDebugTextureLoadTimes[(U32)index][(U32)discard_level] = mDebugSelfLoadTimer.getElapsedTimeF32(); } if (final) { @@ -1791,14 +1821,14 @@ if (index < 0 || index >= TEX_NUM_INDICES) } } -void LLVOAvatarSelf::bakedTextureUpload(EBakedTextureIndex index, BOOL finished) +void LLVOAvatarSelf::debugBakedTextureUpload(EBakedTextureIndex index, BOOL finished) { U32 done = 0; if (finished) { done = 1; } - mBakedTextureTimes[index][done] = mDebugSelfLoadTimer.getElapsedTimeF32(); + mDebugBakedTextureTimes[index][done] = mDebugSelfLoadTimer.getElapsedTimeF32(); } const LLUUID& LLVOAvatarSelf::grabBakedTexture(EBakedTextureIndex baked_index) const @@ -1963,7 +1993,7 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid ) const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(te); if (texture_dict->mIsBakedTexture) { - bakedTextureUpload(texture_dict->mBakedTextureIndex, TRUE); // FALSE for start of upload, TRUE for finish. + debugBakedTextureUpload(texture_dict->mBakedTextureIndex, TRUE); // FALSE for start of upload, TRUE for finish. llinfos << "New baked texture: " << texture_dict->mName << " UUID: " << uuid <<llendl; } else @@ -1993,8 +2023,8 @@ void LLVOAvatarSelf::outputRezDiagnostics() const { const F32 final_time = mDebugSelfLoadTimer.getElapsedTimeF32(); llinfos << "REZTIME: Myself rez stats:" << llendl; - llinfos << "\t Time from avatar creation to load wearables: " << (S32)mTimeWearablesLoaded << llendl; - llinfos << "\t Time from avatar creation to de-cloud: " << (S32)mTimeAvatarVisible << llendl; + llinfos << "\t Time from avatar creation to load wearables: " << (S32)mDebugTimeWearablesLoaded << llendl; + llinfos << "\t Time from avatar creation to de-cloud: " << (S32)mDebugTimeAvatarVisible << llendl; llinfos << "\t Time from avatar creation to de-cloud for others: " << (S32)final_time << llendl; llinfos << "\t Load time for each texture: " << llendl; for (U32 i = 0; i < LLVOAvatarDefines::TEX_NUM_INDICES; ++i) @@ -2005,7 +2035,7 @@ void LLVOAvatarSelf::outputRezDiagnostics() const for (j=0; j <= MAX_DISCARD_LEVEL; j++) { out << "\t"; - S32 load_time = (S32)mTextureLoadTimes[i][j]; + S32 load_time = (S32)mDebugTextureLoadTimes[i][j]; if (load_time == -1) { out << "*"; @@ -2025,7 +2055,7 @@ void LLVOAvatarSelf::outputRezDiagnostics() const llinfos << "\t Time points for each upload (start / finish)" << llendl; for (U32 i = 0; i < LLVOAvatarDefines::BAKED_NUM_INDICES; ++i) { - llinfos << "\t\t (" << i << ") \t" << (S32)mBakedTextureTimes[i][0] << " / " << (S32)mBakedTextureTimes[i][1] << llendl; + llinfos << "\t\t (" << i << ") \t" << (S32)mDebugBakedTextureTimes[i][0] << " / " << (S32)mDebugBakedTextureTimes[i][1] << llendl; } } diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 666219f3aa..189c1ac808 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -124,8 +124,6 @@ public: //-------------------------------------------------------------------- public: /*virtual*/ BOOL getIsCloud(); - void bakedTextureUpload(LLVOAvatarDefines::EBakedTextureIndex index, BOOL finished); - static void onTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); //-------------------------------------------------------------------- // Region state @@ -181,6 +179,9 @@ public: BOOL isLocalTextureDataFinal(const LLTexLayerSet* layerset) const; // If you want to check all textures of a given type, pass gAgentWearables.getWearableCount() for index /*virtual*/ BOOL isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index) const; + /*virtual*/ BOOL isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const; + /*virtual*/ BOOL isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const; + //-------------------------------------------------------------------- // Local Textures @@ -217,6 +218,8 @@ public: static void processRebakeAvatarTextures(LLMessageSystem* msg, void**); protected: /*virtual*/ void removeMissingBakedTextures(); +private: + LLFrameTimer mBakeTimeoutTimer; //-------------------------------------------------------------------- // Layers @@ -348,16 +351,18 @@ public: LLUUID mAvatarID; LLVOAvatarDefines::ETextureIndex mIndex; }; - void wearablesLoaded() { mTimeWearablesLoaded = mDebugSelfLoadTimer.getElapsedTimeF32(); } - void avatarVisible() { mTimeAvatarVisible = mDebugSelfLoadTimer.getElapsedTimeF32(); } + void debugWearablesLoaded() { mDebugTimeWearablesLoaded = mDebugSelfLoadTimer.getElapsedTimeF32(); } + void debugAvatarVisible() { mDebugTimeAvatarVisible = mDebugSelfLoadTimer.getElapsedTimeF32(); } void outputRezDiagnostics() const; + void debugBakedTextureUpload(LLVOAvatarDefines::EBakedTextureIndex index, BOOL finished); + static void debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); private: LLFrameTimer mDebugSelfLoadTimer; - F32 mTimeWearablesLoaded; - F32 mTimeAvatarVisible; - F32 mTextureLoadTimes[LLVOAvatarDefines::TEX_NUM_INDICES][MAX_DISCARD_LEVEL+1]; // load time for each texture at each discard level - F32 mBakedTextureTimes[LLVOAvatarDefines::BAKED_NUM_INDICES][2]; // time to start upload and finish upload of each baked texture - void timingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); + F32 mDebugTimeWearablesLoaded; + F32 mDebugTimeAvatarVisible; + F32 mDebugTextureLoadTimes[LLVOAvatarDefines::TEX_NUM_INDICES][MAX_DISCARD_LEVEL+1]; // load time for each texture at each discard level + F32 mDebugBakedTextureTimes[LLVOAvatarDefines::BAKED_NUM_INDICES][2]; // time to start upload and finish upload of each baked texture + void debugTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); /** Diagnostics ** ** diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 6c27aefebb..9e9b46473e 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -33,23 +33,25 @@ #include "llviewerprecompiledheaders.h" #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" -#include "llfloatercustomize.h" +#include "lldictionary.h" #include "lllocaltextureobject.h" #include "llnotificationsutil.h" #include "llviewertexturelist.h" #include "llinventorymodel.h" #include "llinventoryobserver.h" +#include "llsidepanelappearance.h" +#include "llsidetray.h" +#include "lltexlayer.h" +#include "lltexglobalcolor.h" +#include "lltrans.h" #include "llviewerregion.h" +#include "llvisualparam.h" #include "llvoavatar.h" #include "llvoavatarself.h" #include "llvoavatardefines.h" #include "llwearable.h" -#include "lldictionary.h" -#include "lltrans.h" -#include "lltexlayer.h" -#include "llvisualparam.h" -#include "lltexglobalcolor.h" using namespace LLVOAvatarDefines; @@ -442,7 +444,7 @@ BOOL LLWearable::importFile( LLFILE* file ) delete mSavedTEMap[te]; } - image->setLoadedCallback(LLVOAvatarSelf::onTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te)); + image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te)); LLUUID textureid(text_buffer); @@ -576,14 +578,6 @@ BOOL LLWearable::isDirty() const } } - //if( gFloaterCustomize ) - //{ - // if( mDescription != gFloaterCustomize->getWearableDescription( mType ) ) - // { - // return TRUE; - // } - //} - return FALSE; } @@ -705,9 +699,9 @@ void LLWearable::removeFromAvatar( LLWearableType::EType type, BOOL upload_bake } } - if( gFloaterCustomize ) + if( gAgentCamera.cameraCustomizeAvatar() ) { - gFloaterCustomize->setWearable(type, NULL, PERM_ALL, TRUE); + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); } gAgentAvatarp->updateVisualParams(); @@ -976,9 +970,11 @@ void LLWearable::revertValues() syncImages(mSavedTEMap, mTEMap); - if( gFloaterCustomize ) + + LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); + if( panel ) { - gFloaterCustomize->updateScrollingPanelList(TRUE); + panel->updateScrollingPanelList(); } } @@ -1015,9 +1011,11 @@ void LLWearable::saveValues() // Deep copy of mTEMap (copies only those tes that are current, filling in defaults where needed) syncImages(mTEMap, mSavedTEMap); - if( gFloaterCustomize ) + + LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); + if( panel ) { - gFloaterCustomize->updateScrollingPanelList(TRUE); + panel->updateScrollingPanelList(); } } diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index b209dfecce..fb7577c008 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -35,8 +35,11 @@ #include "lliconctrl.h" +#include "llagentwearables.h" +#include "llappearancemgr.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "llmenugl.h" // for LLContextMenu #include "lltransutil.h" class LLFindOutfitItems : public LLInventoryCollectFunctor @@ -377,12 +380,17 @@ static const LLWearableItemTypeNameComparator WEARABLE_TYPE_NAME_COMPARATOR; static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_items_list"); LLWearableItemsList::Params::Params() +: use_internal_context_menu("use_internal_context_menu", true) {} LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p) : LLInventoryItemsList(p) { setComparator(&WEARABLE_TYPE_NAME_COMPARATOR); + if (p.use_internal_context_menu) + { + setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3)); + } } // virtual @@ -406,4 +414,140 @@ void LLWearableItemsList::updateList(const LLUUID& category_id) refreshList(item_array); } +void LLWearableItemsList::onRightClick(S32 x, S32 y) +{ + uuid_vec_t selected_uuids; + + getSelectedUUIDs(selected_uuids); + if (selected_uuids.empty()) + { + return; + } + + ContextMenu::instance().show(this, selected_uuids, x, y); +} + +////////////////////////////////////////////////////////////////////////// +/// ContextMenu +////////////////////////////////////////////////////////////////////////// + +// virtual +LLContextMenu* LLWearableItemsList::ContextMenu::createMenu() +{ + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + const uuid_vec_t& ids = mUUIDs; // selected items IDs + LLUUID selected_id = ids.front(); // ID of the first selected item + + functor_t wear = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, false); + functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1); + + // Register handlers common for all wearable types. + registrar.add("Wearable.Wear", boost::bind(handleMultiple, wear, ids)); + registrar.add("Wearable.Edit", boost::bind(handleMultiple, LLAgentWearables::editWearable, ids)); + registrar.add("Wearable.ShowOriginal", boost::bind(show_item_original, selected_id)); + + // Register handlers for clothing. + registrar.add("Clothing.TakeOff", boost::bind(handleMultiple, take_off, ids)); + + // Register handlers for body parts. + + // Register handlers for attachments. + registrar.add("Attachment.Detach", boost::bind(handleMultiple, take_off, ids)); + registrar.add("Attachment.Profile", boost::bind(show_item_profile, selected_id)); + + // Create the menu. + LLContextMenu* menu = createFromFile("menu_wearable_list_item.xml"); + + // Determine which items should be visible/enabled. + updateItemsVisibility(menu); + return menu; +} + +void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu) +{ + if (!menu) + { + llwarns << "Invalid menu" << llendl; + return; + } + + const uuid_vec_t& ids = mUUIDs; // selected items IDs + U32 mask = 0; // mask of selected items' types + U32 nitems = ids.size(); // number of selected items + U32 nworn = 0; // number of worn items among the selected ones + U32 nwornlinks = 0; // number of worn links among the selected items + U32 neditable = 0; // number of editable items among the selected ones + + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) + { + LLUUID id = *it; + LLViewerInventoryItem* item = gInventory.getItem(id); + + if (!item) + { + llwarns << "Invalid item" << llendl; + // *NOTE: the logic below may not work in this case + continue; + } + + updateMask(mask, item->getType()); + + bool is_link = item->getIsLinkType(); + bool is_worn = get_is_item_worn(id); + bool is_editable = gAgentWearables.isWearableModifiable(id); + + if (is_worn) + { + ++nworn; + + if (is_link) + { + ++nwornlinks; + } + } + if (is_editable) + { + ++neditable; + } + } // for + + // *TODO: eliminate multiple traversals over the menu items + // *TODO: try disabling items rather than hiding them + // *FIX: we may hide *all* items and thus get an ugly empty menu + setMenuItemVisible(menu, "wear", nworn == 0); + setMenuItemVisible(menu, "edit", mask & (MASK_CLOTHING|MASK_BODYPART) && nitems == 1 && neditable == 1); + setMenuItemVisible(menu, "show_original", nitems == 1 && nwornlinks == nitems); + setMenuItemVisible(menu, "take_off", mask == MASK_CLOTHING && nworn == nitems); // selected only worn clothes + setMenuItemVisible(menu, "detach", mask == MASK_ATTACHMENT && nworn == nitems); + setMenuItemVisible(menu, "object_profile", mask == MASK_ATTACHMENT && nitems == 1); +} + +// We need this method to convert non-zero BOOL values to exactly 1 (TRUE). +// Otherwise code relying on a BOOL value being TRUE may fail +// (I experienced a weird assert in LLView::drawChildren() because of that. +void LLWearableItemsList::ContextMenu::setMenuItemVisible(LLContextMenu* menu, const std::string& name, bool val) +{ + menu->setItemVisible(name, val); +} + +void LLWearableItemsList::ContextMenu::updateMask(U32& mask, LLAssetType::EType at) +{ + if (at == LLAssetType::AT_CLOTHING) + { + mask |= MASK_CLOTHING; + } + else if (at == LLAssetType::AT_BODYPART) + { + mask |= MASK_BODYPART; + } + else if (at == LLAssetType::AT_OBJECT) + { + mask |= MASK_ATTACHMENT; + } + else + { + llwarns << "Unsupported asset type: " << at << llendl; + } +} + // EOF diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 2cab5a07a2..7ad1b5a3ad 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -32,11 +32,14 @@ #ifndef LL_LLWEARABLEITEMSLIST_H #define LL_LLWEARABLEITEMSLIST_H +// libs #include "llpanel.h" +#include "llsingleton.h" // newview #include "llinventoryitemslist.h" #include "llinventorymodel.h" +#include "lllistcontextmenu.h" #include "llwearabletype.h" /** @@ -274,8 +277,32 @@ private: class LLWearableItemsList : public LLInventoryItemsList { public: + /** + * Context menu. + * + * This menu is likely to be used from outside + * (e.g. for items selected across multiple wearable lists), + * so making it a singleton. + */ + class ContextMenu : public LLListContextMenu, public LLSingleton<ContextMenu> + { + protected: + enum { + MASK_CLOTHING = 0x01, + MASK_BODYPART = 0x02, + MASK_ATTACHMENT = 0x04, + }; + + /* virtual */ LLContextMenu* createMenu(); + void updateItemsVisibility(LLContextMenu* menu); + void setMenuItemVisible(LLContextMenu* menu, const std::string& name, bool val); + void updateMask(U32& mask, LLAssetType::EType at); + }; + struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params> { + Optional<bool> use_internal_context_menu; + Params(); }; @@ -286,6 +313,8 @@ public: protected: friend class LLUICtrlFactory; LLWearableItemsList(const LLWearableItemsList::Params& p); + + void onRightClick(S32 x, S32 y); }; #endif //LL_LLWEARABLEITEMSLIST_H diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 58b9f5ce18..f30567f481 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -91,7 +91,8 @@ LLWorld::LLWorld() : mLastPacketsIn(0), mLastPacketsOut(0), mLastPacketsLost(0), - mSpaceTimeUSec(0) + mSpaceTimeUSec(0), + mClassicCloudsEnabled(TRUE) { for (S32 i = 0; i < 8; i++) { @@ -662,16 +663,41 @@ void LLWorld::updateClouds(const F32 dt) static LLFastTimer::DeclareTimer ftm("World Clouds"); LLFastTimer t(ftm); - if (gSavedSettings.getBOOL("FreezeTime") || - !gSavedSettings.getBOOL("SkyUseClassicClouds")) + if ( gSavedSettings.getBOOL("FreezeTime") ) { // don't move clouds in snapshot mode return; } + + if ( + mClassicCloudsEnabled != + gSavedSettings.getBOOL("SkyUseClassicClouds") ) + { + // The classic cloud toggle has been flipped + // gotta update all of the cloud layers + mClassicCloudsEnabled = + gSavedSettings.getBOOL("SkyUseClassicClouds"); + + if ( !mClassicCloudsEnabled && mActiveRegionList.size() ) + { + // We've transitioned to having classic clouds disabled + // reset all cloud layers. + for ( + region_list_t::iterator iter = mActiveRegionList.begin(); + iter != mActiveRegionList.end(); + ++iter) + { + LLViewerRegion* regionp = *iter; + regionp->mCloudLayer.reset(); + } + + return; + } + } + else if ( !mClassicCloudsEnabled ) return; + if (mActiveRegionList.size()) { - // Update all the cloud puff positions, and timer based stuff - // such as death decay for (region_list_t::iterator iter = mActiveRegionList.begin(); iter != mActiveRegionList.end(); ++iter) { diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h index 502f7b0320..5310009d7c 100644 --- a/indra/newview/llworld.h +++ b/indra/newview/llworld.h @@ -184,6 +184,8 @@ private: U64 mSpaceTimeUSec; + BOOL mClassicCloudsEnabled; + //////////////////////////// // // Data for "Fake" objects diff --git a/indra/newview/llworldview.cpp b/indra/newview/llworldview.cpp index 665cc74a87..b44a365677 100644 --- a/indra/newview/llworldview.cpp +++ b/indra/newview/llworldview.cpp @@ -44,18 +44,24 @@ static LLDefaultChildRegistry::Register<LLWorldView> r("world_view"); LLWorldView::LLWorldView(const Params& p) : LLUICtrl (p) { + gSavedSettings.getControl("SidebarCameraMovement")->getSignal()->connect(boost::bind(&LLWorldView::toggleSidebarCameraMovement, this, _2)); } void LLWorldView::reshape(S32 width, S32 height, BOOL called_from_parent) { - if (FALSE == gSavedSettings.getBOOL("SidebarCameraMovement") ) - { - LLView* main_view = LLUI::getRootView()->findChild<LLView>("main_view"); - if(main_view) - { - width = main_view->getRect().getWidth(); - } - } + //if (FALSE == gSavedSettings.getBOOL("SidebarCameraMovement") ) + //{ + // LLView* main_view = LLUI::getRootView()->findChild<LLView>("main_view"); + // if(main_view) + // { + // width = main_view->getRect().getWidth(); + // } + //} LLUICtrl::reshape(width, height, called_from_parent); } +void LLWorldView::toggleSidebarCameraMovement(const LLSD::Boolean& new_visibility) +{ + reshape(getParent()->getRect().getWidth(),getRect().getHeight()); +} + diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index bc1a48e26a..e1572e3e3b 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -45,6 +45,7 @@ #include <xmlrpc-epi/xmlrpc.h> #include "llappviewer.h" +#include "lltrans.h" // Static instance of LLXMLRPCListener declared here so that every time we // bring in this code, we instantiate a listener. If we put the static @@ -511,11 +512,7 @@ void LLXMLRPCTransaction::Impl::setStatus(EStatus status, default: // Usually this means that there's a problem with the login server, // not with the client. Direct user to status page. - mStatusMessage = - "Despite our best efforts, something unexpected has gone wrong. \n" - " \n" - "Please check secondlife.com/status \n" - "to see if there is a known problem with the service."; + mStatusMessage = LLTrans::getString("server_is_down"); mStatusURI = "http://secondlife.com/status/"; } diff --git a/indra/newview/macview_Prefix.h b/indra/newview/macview_Prefix.h index a71362a139..07f8093426 100644 --- a/indra/newview/macview_Prefix.h +++ b/indra/newview/macview_Prefix.h @@ -65,7 +65,6 @@ #include "llfloater.h" #include "llfloaterbuildoptions.h" #include "llfloaterchat.h" -#include "llfloatercustomize.h" #include "llfloatergroups.h" #include "llfloaterworldmap.h" #include "llfloatermute.h" diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 0788a0ca9e..91890009f4 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -111,7 +111,7 @@ with the same filename but different name <texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" /> <texture name="DownArrow_Off" file_name="icons/DownArrow_off.png" preload="false" /> - <texture name="Dragbar" file_name="icons/Dragbar.png" preload="false" /> + <texture name="Dragbar" file_name="windows/Dragbar.png" preload="false" scale.left="35" scale.top="5" scale.right="29" scale.bottom="5" /> <texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> @@ -649,4 +649,9 @@ with the same filename but different name <texture name="Progress_11" file_name="icons/Progress_11.png" preload="true" /> <texture name="Progress_12" file_name="icons/Progress_12.png" preload="true" /> + <texture name="bevel_background" file_name="widgets/bevel_background.png" preload="true" scale.left="12" scale.top="15" scale.right="120" scale.bottom="2"/> + <texture name="buy_off" file_name="widgets/buy_off.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/> + <texture name="buy_over" file_name="widgets/buy_over.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/> + <texture name="buy_press" file_name="widgets/buy_press.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/> + </textures> diff --git a/indra/newview/skins/default/textures/widgets/bevel_background.png b/indra/newview/skins/default/textures/widgets/bevel_background.png Binary files differnew file mode 100644 index 0000000000..fb5067503d --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/bevel_background.png diff --git a/indra/newview/skins/default/textures/widgets/buy_off.png b/indra/newview/skins/default/textures/widgets/buy_off.png Binary files differnew file mode 100644 index 0000000000..961ad071d4 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/buy_off.png diff --git a/indra/newview/skins/default/textures/widgets/buy_over.png b/indra/newview/skins/default/textures/widgets/buy_over.png Binary files differnew file mode 100644 index 0000000000..0be19f8a31 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/buy_over.png diff --git a/indra/newview/skins/default/textures/widgets/buy_press.png b/indra/newview/skins/default/textures/widgets/buy_press.png Binary files differnew file mode 100644 index 0000000000..d6f587464d --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/buy_press.png diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml index 1f79889bb7..f978b24d0d 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml @@ -59,7 +59,7 @@ </text> <button label="Jetzt kaufen" name="buy_btn"/> <button label="Abbrechen" name="cancel_btn"/> - <text height="40" left="160" name="info_cannot_buy" width="200"> + <text name="info_cannot_buy"> Kauf nicht möglich </text> <button label="Weiter zur Kontoseite" name="error_web"/> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 20e7c28db0..5f28fa6495 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1933,7 +1933,7 @@ Only large parcels can be listed in search. left_delta="20" name="Only Allow" top="49" - width="278"> + width="325"> Restrict Access to Residents verified by: </text> <check_box diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml index ab44082070..4643f66bd8 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml @@ -2,26 +2,26 @@ <floater legacy_header_height="18" can_resize="false" - height="240" + height="280" layout="topleft" - min_height="240" - min_width="420" + min_height="280" + min_width="450" name="floater_buy_currency_html" help_topic="floater_buy_currency_html" save_rect="true" single_instance="true" title="BUY CURRENCY" - width="422"> + width="452"> <floater.string name="buy_currency_url" translate="false"> - http://user.lindenlab.com/~callum/ez/index.php?lang=[LANGUAGE]&sa=[SPECIFIC_AMOUNT]&sum=[SUM]&msg=[MSG]&bal=[BAL] -</floater.string> + https://quick-buy-www.jeff.ooze.lindenlab.com/en/display + </floater.string> <web_browser - bottom="238" + bottom="278" follows="left|right|top|bottom" layout="topleft" left="2" name="browser" top="18" - width="420" /> + width="450" /> </floater> diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml index 37ae5a64d7..bcdb63228d 100644 --- a/indra/newview/skins/default/xui/en/inspect_group.xml +++ b/indra/newview/skins/default/xui/en/inspect_group.xml @@ -79,7 +79,7 @@ L$123 to join height="23" label="Join" left="8" - top="286" + top="125" name="join_btn" width="103" commit_callback.function="InspectGroup.Join"/> @@ -88,7 +88,7 @@ L$123 to join height="23" label="Leave" left="8" - top="286" + top="125" name="leave_btn" width="103" commit_callback.function="InspectGroup.Leave"/> @@ -97,7 +97,7 @@ L$123 to join height="23" label="View Profile" name="view_profile_btn" - top="286" + top="125" left="117" width="103" commit_callback.function="InspectGroup.ViewProfile" /> diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index b8a7222e8e..f629eef475 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -18,8 +18,8 @@ width="228"> <string name="Creator">By [CREATOR]</string> <string name="CreatorAndOwner"> -by [CREATOR] -owner [OWNER] +By [CREATOR] +Owner [OWNER] </string> <string name="Price">L$[AMOUNT]</string> <string name="PriceFree">Free!</string> @@ -29,61 +29,52 @@ owner [OWNER] allow_html="false" follows="all" font="SansSerifLarge" - height="16" + height="30" left="8" name="object_name" text_color="White" - top="10" + top="6" use_ellipses="true" - value="Test Object Name That Is Really Long" + word_wrap="true" + value="Test Object Name That Is actually two lines and Really Long" width="220" /> <text follows="all" - height="33" + height="50" left="8" name="object_creator" - top_pad="0" + top_pad="6" use_ellipses="true" width="220"> by secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about </text> - <!-- *TODO: Replace this icon --> - <icon - name="price_icon" - image_name="Icon_For_Sale" - right="-5" - width="16" - height="16" - top="56" - follows="left|top" - /> <text follows="all" font="SansSerifSmall" font.style="BOLD" - height="16" + height="14" halign="right" - left="5" + right="-5" name="price_text" text_color="white" - top="58" + top="60" font_shadow="none" - width="196"> -L$300,000 + width="60"> +L$30,000 </text> <text - clip_partial="true" + clip_partial="true" follows="all" font="SansSerifSmall" - height="37" + height="25" left="8" name="object_description" - top_pad="0" - use_ellipses="true" + top="76" + use_ellipses="true" width="220" word_wrap="true"> -This is a really long description for an object being as how it is at least 80 characters in length and maybe more like 120 at this point. Who knows, really? +This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really? </text> <!-- Overlapping buttons for all default actions. Show "Buy" if for sale, "Sit" if can sit, etc. --> @@ -91,10 +82,9 @@ This is a really long description for an object being as how it is at least 80 c follows="all" font="SansSerifSmall" height="13" - left_delta="0" name="object_media_url" - bottom_pad="2" - width="200" + width="220" + top_pad="0" max_length = "50" use_ellipses="true"> http://www.superdupertest.com diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index e42b88abc3..b2e4a7ad95 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -50,7 +50,7 @@ name="non_side_tray_view" user_resize="false" width="500"> - <world_view bottom="500" + <view bottom="500" follows="all" height="500" left="0" diff --git a/indra/newview/skins/default/xui/en/menu_cof_attachment.xml b/indra/newview/skins/default/xui/en/menu_cof_attachment.xml new file mode 100644 index 0000000000..b422d87938 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_cof_attachment.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="COF Attachment"> + <menu_item_call + label="Detach" + layout="topleft" + name="detach"> + <on_click + function="Attachment.Detach" + parameter="detach"/> + </menu_item_call> + <context_menu + label="Attach to" + layout="topleft" + name="attach_to" /> + <context_menu + label="Attach to HUD" + layout="topleft" + name="attach_to_hud" /> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_cof_body_part.xml b/indra/newview/skins/default/xui/en/menu_cof_body_part.xml new file mode 100644 index 0000000000..01008ef203 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_cof_body_part.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="COF Body"> + <menu_item_call + label="Replace" + layout="topleft" + name="replace"> + <on_click + function="BodyPart.Replace"/> + </menu_item_call> + <menu_item_call + label="Edit" + layout="topleft" + name="edit"> + <on_click + function="BodyPart.Edit"/> + <on_enable + function="BodyPart.OnEnable" + parameter="edit" /> + </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_cof_clothing.xml b/indra/newview/skins/default/xui/en/menu_cof_clothing.xml new file mode 100644 index 0000000000..f9cb29f0d7 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_cof_clothing.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="COF Clothing"> + <menu_item_call + label="Take Off" + layout="topleft" + name="take_off"> + <on_click + function="Clothing.TakeOff" /> + </menu_item_call> + <menu_item_call + label="Move Up a Layer" + layout="topleft" + name="move_up"> + <on_click + function="Clothing.MoveUp" /> + <on_enable + function="Clothing.OnEnable" + parameter="move_up" /> + </menu_item_call> + <menu_item_call + label="Move Down a Layer" + layout="topleft" + name="move_down"> + <on_click + function="Clothing.MoveDown" /> + <on_enable + function="Clothing.OnEnable" + parameter="move_down" /> + </menu_item_call> + <menu_item_call + label="Edit" + layout="topleft" + name="edit"> + <on_click + function="Clothing.Edit" /> + <on_enable + function="Clothing.OnEnable" + parameter="edit" /> + </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_cof_gear.xml b/indra/newview/skins/default/xui/en/menu_cof_gear.xml new file mode 100644 index 0000000000..982d4f2015 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_cof_gear.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + name="Gear COF"> + <menu_item_call + label="Add To Outfit" + layout="topleft" + name="add"> + <on_click + function="Gear.OnClick" + parameter="add"/> + <on_enable + function="Gear.OnEnable" + parameter="add" /> + </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml new file mode 100644 index 0000000000..dfc72b557c --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + name="Gear Outfit"> + <menu_item_call + label="Wear - Replace Current Outfit" + layout="topleft" + name="wear"> + <on_click + function="Gear.OnClick" + parameter="wear"/> + <on_enable + function="Gear.OnEnable" + parameter="wear" /> + </menu_item_call> + <menu_item_call + label="Take Off - Remove Current Outfit" + layout="topleft" + name="take_off"> + <on_click + function="Gear.OnClick" + parameter="take_off"/> + <on_enable + function="Gear.OnEnable" + parameter="take_off" /> + </menu_item_call> + <menu_item_separator /> + <menu_item_call + label="Rename" + layout="topleft" + name="rename"> + <on_click + function="Gear.OnClick" + parameter="rename"/> + <on_enable + function="Gear.OnEnable" + parameter="rename" /> + </menu_item_call> + <menu_item_call + label="Delete Outfit" + layout="topleft" + name="delete_outfit"> + <on_click + function="Gear.OnClick" + parameter="delete_outfit"/> + <on_enable + function="Gear.OnEnable" + parameter="delete_outfit" /> + </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml new file mode 100644 index 0000000000..8f3e62157a --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Outfit"> + <menu_item_call + label="Wear - Replace Current Outfit" + layout="topleft" + name="wear_replace"> + <on_click + function="Outfit.WearReplace" /> + </menu_item_call> + <menu_item_call + label="Wear - Add to Current Outfit" + layout="topleft" + name="wear_add"> + <on_click + function="Outfit.WearAdd" /> + </menu_item_call> + <menu_item_call + label="Take Off - Remove Current Outfit" + layout="topleft" + name="take_off"> + <on_click + function="Outfit.TakeOff" /> + </menu_item_call> + <menu_item_separator /> + <menu_item_call + label="Rename" + layout="topleft" + name="rename"> + <on_click + function="Outfit.Rename" /> + </menu_item_call> + <menu_item_call + label="Delete Outfit" + layout="topleft" + name="delete"> + <on_click + function="Outfit.Delete" /> + </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 16c2581d63..aff8f7ddf4 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -521,6 +521,52 @@ <menu_item_check.on_enable function="Tools.EnableToolNotPie" /> </menu_item_check> + <menu + create_jump_keys="true" + label="Select Linked Parts" + name="Select Linked Parts" + tear_off="true"> + <menu_item_call + label="Select Next Part" + name="Select Next Part" + shortcut="control|."> + <menu_item_call.on_click + function="Tools.SelectNextPart" + parameter="next" /> + <menu_item_call.on_enable + function="Tools.EnableSelectNextPart" /> + </menu_item_call> + <menu_item_call + label="Select Previous Part" + name="Select Previous Part" + shortcut="control|,"> + <menu_item_call.on_click + function="Tools.SelectNextPart" + parameter="previous" /> + <menu_item_call.on_enable + function="Tools.EnableSelectNextPart" /> + </menu_item_call> + <menu_item_call + label="Include Next Part" + name="Include Next Part" + shortcut="control|shift|."> + <menu_item_call.on_click + function="Tools.SelectNextPart" + parameter="includenext" /> + <menu_item_call.on_enable + function="Tools.EnableSelectNextPart" /> + </menu_item_call> + <menu_item_call + label="Include Previous Part" + name="Include Previous Part" + shortcut="control|shift|,"> + <menu_item_call.on_click + function="Tools.SelectNextPart" + parameter="includeprevious" /> + <menu_item_call.on_enable + function="Tools.EnableSelectNextPart" /> + </menu_item_call> + </menu> <menu_item_separator/> <menu_item_call label="Focus on Selection" @@ -764,49 +810,60 @@ </menu> <menu create_jump_keys="true" - label="Select Linked Parts" - name="Select Linked Parts" + label="Upload" + layout="topleft" + name="Upload" tear_off="true"> <menu_item_call - label="Select Next Part" - name="Select Next Part" - shortcut="control|."> + label="Image (L$[COST])..." + layout="topleft" + name="Upload Image" + shortcut="control|U"> <menu_item_call.on_click - function="Tools.SelectNextPart" - parameter="next" /> + function="File.UploadImage" + parameter="" /> <menu_item_call.on_enable - function="Tools.EnableSelectNextPart" /> + function="File.EnableUpload" /> + <menu_item_call.on_visible + function="Upload.CalculateCosts" + parameter="Upload Image" /> </menu_item_call> <menu_item_call - label="Select Previous Part" - name="Select Previous Part" - shortcut="control|,"> + label="Sound (L$[COST])..." + layout="topleft" + name="Upload Sound"> <menu_item_call.on_click - function="Tools.SelectNextPart" - parameter="previous" /> + function="File.UploadSound" + parameter="" /> <menu_item_call.on_enable - function="Tools.EnableSelectNextPart" /> + function="File.EnableUpload" /> + <menu_item_call.on_visible + function="Upload.CalculateCosts" + parameter="Upload Sound" /> </menu_item_call> <menu_item_call - label="Include Next Part" - name="Include Next Part" - shortcut="control|shift|."> + label="Animation (L$[COST])..." + layout="topleft" + name="Upload Animation"> <menu_item_call.on_click - function="Tools.SelectNextPart" - parameter="includenext" /> + function="File.UploadAnim" + parameter="" /> <menu_item_call.on_enable - function="Tools.EnableSelectNextPart" /> + function="File.EnableUpload" /> + <menu_item_call.on_visible + function="Upload.CalculateCosts" + parameter="Upload Animation" /> </menu_item_call> <menu_item_call - label="Include Previous Part" - name="Include Previous Part" - shortcut="control|shift|,"> + label="Bulk (L$[COST] per file)..." + layout="topleft" + name="Bulk Upload"> <menu_item_call.on_click - function="Tools.SelectNextPart" - parameter="includeprevious" /> - <menu_item_call.on_enable - function="Tools.EnableSelectNextPart" /> + function="File.UploadBulk" + parameter="" /> </menu_item_call> + <menu_item_separator + layout="topleft" /> </menu> </menu> <menu @@ -3210,4 +3267,4 @@ </menu> </menu> </menu> -</menu_bar> +</menu_bar>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml new file mode 100644 index 0000000000..7ea7eaade5 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + name="Outfit Wearable Context Menu"> + <menu_item_call + label="Wear" + layout="topleft" + name="wear"> + <on_click + function="Wearable.Wear" /> + </menu_item_call> + <menu_item_call + label="Detach" + layout="topleft" + name="detach"> + <on_click + function="Attachment.Detach" /> + </menu_item_call> +<!-- *TODO: implement the submenus + <menu + label="Attach to" + layout="topleft" + name="attach_to" /> + <menu + label="Attach to HUD" + layout="topleft" + name="attach_to_hud" /> +--> + <menu_item_call + label="Object Profile" + layout="topleft" + name="object_profile"> + <on_click + function="Attachment.Profile" /> + </menu_item_call> + <menu_item_call + label="Take Off" + layout="topleft" + name="take_off"> + <on_click + function="Clothing.TakeOff" + parameter="take_off"/> + </menu_item_call> + <menu_item_call + label="Edit" + layout="topleft" + name="edit"> + <on_click + function="Wearable.Edit" + parameter="edit"/> + </menu_item_call> + <menu_item_call + label="Show Original" + layout="topleft" + name="show_original"> + <on_click + function="Wearable.ShowOriginal" /> + </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 999f804e71..0bf71844bf 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3451,7 +3451,7 @@ You are not allowed in that region due to your maturity Rating. type="alertmodal"> You are not allowed in that Region due to your maturity Rating preference. -Click 'Change Preference' to raise your maturity Rating preference for immediate entry. Doing so will allow you to search for and access [REGIONMATURITY] content. If you wish to change this setting later, you may do so from Me > Preferences > General. +To enter the desired region, please change your maturity Rating preference. This will allow you to search for and access [REGIONMATURITY] content. To undo any changes, go to Me > Preferences > General. <form name="form"> <button index="0" diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml index 5fcc9b012b..066992b25d 100644 --- a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml @@ -15,6 +15,7 @@ allow_select="true" follows="all" keep_one_selected="true" + multi_select="true" name="wearable_items_list" translate="false" /> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index bfc40a8638..ac61c7da5d 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -67,7 +67,7 @@ mouse_opaque="false" name="speak_panel" top_delta="0" - user_resize="false" + user_resize="true" width="110"> <talk_button follows="left|right" @@ -193,6 +193,7 @@ min_width="40" mouse_opaque="false" name="snapshot_panel" + user_resize="false" width="39"> <button follows="left|right" diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml index 86b9ea6e14..cf84c31078 100644 --- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml +++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml @@ -29,6 +29,7 @@ height="10" layout="topleft" left="0" + multi_select="true" name="list_attachments" top="0" width="311" /> @@ -63,6 +64,7 @@ height="10" layout="topleft" left="0" + multi_select="true" name="list_clothing" top_pad="0" width="311" /> @@ -98,6 +100,7 @@ height="10" layout="topleft" left="0" + multi_select="true" name="list_body_parts" top_pad="0" width="311" /> diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml index 76842e5279..cf15fb0455 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml @@ -43,7 +43,7 @@ name="wearable_accordion" top="0" single_expansion="true" - fit_parent="false" + fit_parent="true" width="313"> <accordion_tab layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 71f740590b..0455086ef3 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -107,7 +107,7 @@ left="0" Jacket: </string> <string - name="skirt_skirt_desc_text"> + name="skirt_desc_text"> Skirt: </string> <string diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index b473a7a282..bc984ccc44 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -150,8 +150,14 @@ <!-- LIST OF WEARABLES (CURRENT OUTFIT/ WEARABLES TO ADD) --> +<!-- *NOTE: border_size is used to calculate space between layout panel and for resize bar height +required height for dragbar is 10, so resizebar height should be 10 px. +It is calculated as border_size + 2*UIResizeBarOverlap +--> <layout_stack animate="false" + border_size="8" + clip="false" default_tab_group="2" follows="all" height="495" @@ -222,15 +228,24 @@ <layout_panel + background_visible="true" + bg_alpha_color="DkGray2" auto_resize="true" default_tab_group="3" - height="210" + height="211" min_height="210" name="add_wearables_panel" width="313" tab_group="2" user_resize="true" visible="false"> + <icon + follows="left|top|right" + height="10" + image_name="Dragbar" + left="0" + top_pad="-9" + width="313" /> <text follows="top|left|right" font="SansSerifBold" @@ -239,22 +254,19 @@ left="5" name="add_to_outfit_label" text_color="LtGray" - top="3" + top="4" value="Add to Outfit:" use_ellipses="true" width="150" /> <button - follows="top|left|right" + follows="top|right" height="20" - image_hover_unselected="Toolbar_Middle_Over" image_overlay="Search_Icon" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" is_toggle="true" layout="topleft" left_pad="5" name="filter_button" - top="3" + top_delta="0" width="20" /> <combo_box follows="top|left|right" @@ -262,14 +274,14 @@ layout="topleft" right="-5" name="filter_wearables_combobox" - top="2" + top_delta="0" width="110"/> <layout_stack animate="true" follows="all" height="155" - width="311" + width="313" layout="topleft" name="filter_panels" top_pad="5" @@ -301,6 +313,8 @@ </layout_panel> <layout_panel auto_resize="true" + background_visible="true" + bg_alpha_color="0.107 0.107 0.107 1" height="145" min_width="130" name="inventory_panel" @@ -308,6 +322,7 @@ user_resize="true"> <inventory_panel allow_multi_select="true" + background_visible="false" border="false" follows="left|top|right|bottom" height="140" @@ -321,7 +336,7 @@ <panel name="filtered_wearables_panel" background_opaque="true" - background_visible="true" + background_visible="false" layout="topleft" follows="left|top|right|bottom" border="false" @@ -332,10 +347,12 @@ top_delta="0" visible="true"> <wearable_items_list + color="0.107 0.107 0.107 1" name="filtered_wearables_list" allow_select="true" layout="topleft" follows="all" + multi_select="true" width="310" height="140" left="0" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 10beb89940..266fd6cb5e 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -390,7 +390,7 @@ height="12" layout="topleft" left_delta="291" - name="DrawDistanceMeterText2" + name="DrawDistanceMeterText3" top_delta="0" width="128"> m diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 690d2971ee..008aa1acc0 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -43,38 +43,43 @@ </panel.string> <button auto_resize="true" - halign="right" + halign="center" + enabled="false" font="SansSerifSmall" follows="right|top" image_overlay="" - image_selected="spacer35.tga" - image_unselected="spacer35.tga" - image_pressed="spacer35.tga" - height="16" - right="-230" + image_selected="bevel_background" + image_unselected="bevel_background" + image_pressed="bevel_background" + height="18" + right="-275" label_shadow="false" name="buycurrency" + label_color_disabled="ButtonLabelColor" + image_color_disabled="White" tool_tip="My Balance" - top="3" - width="120" /> + pad_left="12" + pad_right="12" + top="0" + width="40" /> <button auto_resize="true" - halign="right" + halign="center" font="SansSerifSmall" follows="right|top" - image_selected="spacer35.tga" - image_unselected="spacer35.tga" - image_pressed="spacer35.tga" - height="16" - label="Buy L$" - label_color="EmphasisColor" + image_hover_unselected="buy_over" + image_unselected="buy_off" + image_pressed="buy_press" + height="18" + label="BUY L$" + label_color="White" left_pad="0" - label_shadow="false" + label_shadow="true" name="buyL" - pad_right="20" + pad_right="0" pad_bottom="2" tool_tip="Click to buy more L$" - top="2" + top="0" width="55" /> <text type="string" @@ -88,7 +93,7 @@ left_pad="0" name="TimeText" tool_tip="Current time (Pacific)" - width="100"> + width="145"> 24:00 AM PST </text> <button diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f8bb36b88a..e57b30185d 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3176,5 +3176,11 @@ Abuse Report</string> <!-- language specific white-space characters, delimiters, spacers, item separation symbols --> <string name="sentences_separator" value=" "></string> + + <string name="server_is_down"> + Despite our best efforts, something unexpected has gone wrong. + + Please check secondlife.com/status to see if there is a known problem with the service. + </string> </strings> diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml index ebd0bdb3d7..1af089cfaf 100644 --- a/indra/newview/skins/default/xui/es/floater_about.xml +++ b/indra/newview/skins/default/xui/es/floater_about.xml @@ -29,7 +29,7 @@ Versión de libcurl: [LIBCURL_VERSION] Versión de J2C Decoder: [J2C_VERSION] Versión de Audio Driver: [AUDIO_DRIVER_VERSION] Versión de Qt Webkit: [QT_WEBKIT_VERSION] -Versión de Vivox: [VIVOX_VERSION] +Versión del servidor de voz: [VOICE_VERSION] </floater.string> <floater.string name="none"> (no hay) diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index f3a278945c..c672f68c5c 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -63,6 +63,9 @@ No se ha seleccionado una parcela. Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver sus características. </panel.string> + <panel.string name="time_stamp_template"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </panel.string> <text name="Name:"> Nombre: </text> diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml index 089ff3cd68..54ef34264c 100644 --- a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml @@ -3,41 +3,46 @@ <floater.string name="InvalidAvatar"> AVATAR NO VÁLIDO </floater.string> - <text name="composite_label"> - Texturas compuestas - </text> - <button label="Soltar" label_selected="Soltar" name="Dump"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <texture_picker label="Pelo" name="hair-baked"/> - <texture_picker label="Pelo" name="hair_grain"/> - <texture_picker label="Alfa del pelo" name="hair_alpha"/> - <texture_picker label="Cabeza" name="head-baked"/> - <texture_picker label="Maquillaje" name="head_bodypaint"/> - <texture_picker label="Alfa de la cabeza" name="head_alpha"/> - <texture_picker label="Tatuaje de la cabeza" name="head_tattoo"/> - <texture_picker label="Ojos" name="eyes-baked"/> - <texture_picker label="Ojo" name="eyes_iris"/> - <texture_picker label="Alfa de los ojos" name="eyes_alpha"/> - <texture_picker label="Parte superior del cuerpo" name="upper-baked"/> - <texture_picker label="Pintura corporal: parte superior del cuerpo" name="upper_bodypaint"/> - <texture_picker label="Camiseta" name="upper_undershirt"/> - <texture_picker label="Guantes" name="upper_gloves"/> - <texture_picker label="Camisa" name="upper_shirt"/> - <texture_picker label="Parte superior de la chaqueta" name="upper_jacket"/> - <texture_picker label="Alfa superior" name="upper_alpha"/> - <texture_picker label="Tatuaje superior" name="upper_tattoo"/> - <texture_picker label="Parte inferior del cuerpo" name="lower-baked"/> - <texture_picker label="Pintura corporal: parte inferior del cuerpo" name="lower_bodypaint"/> - <texture_picker label="Ropa interior" name="lower_underpants"/> - <texture_picker label="Calcetines" name="lower_socks"/> - <texture_picker label="Zapatos" name="lower_shoes"/> - <texture_picker label="Pantalones" name="lower_pants"/> - <texture_picker label="Chaqueta" name="lower_jacket"/> - <texture_picker label="Alfa inferior" name="lower_alpha"/> - <texture_picker label="Tatuaje inferior" name="lower_tattoo"/> - <texture_picker label="Falda" name="skirt-baked"/> - <texture_picker label="Falda" name="skirt"/> + <text name="label"> + Texturas obtenidas mediante bake + </text> + <text name="composite_label"> + Texturas compuestas + </text> + <button label="Volcar IDs a la consola" label_selected="Volcado" name="Dump"/> + <panel name="scroll_content_panel"> + <texture_picker label="Pelo" name="hair-baked"/> + <texture_picker label="Pelo" name="hair_grain"/> + <texture_picker label="Alfa del pelo" name="hair_alpha"/> + <texture_picker label="Cabeza" name="head-baked"/> + <texture_picker label="Maquillaje" name="head_bodypaint"/> + <texture_picker label="Alfa de la cabeza" name="head_alpha"/> + <texture_picker label="Tatuaje de la cabeza" name="head_tattoo"/> + <texture_picker label="Ojos" name="eyes-baked"/> + <texture_picker label="Ojo" name="eyes_iris"/> + <texture_picker label="Alfa de los ojos" name="eyes_alpha"/> + <texture_picker label="Parte superior del cuerpo" name="upper-baked"/> + <texture_picker label="Pintura corporal superior" name="upper_bodypaint"/> + <texture_picker label="Camiseta" name="upper_undershirt"/> + <texture_picker label="Guantes" name="upper_gloves"/> + <texture_picker label="Camisa" name="upper_shirt"/> + <texture_picker label="Parte superior de la chaqueta" name="upper_jacket"/> + <texture_picker label="Alfa superior" name="upper_alpha"/> + <texture_picker label="Tatuaje superior" name="upper_tattoo"/> + <texture_picker label="Parte inferior del cuerpo" name="lower-baked"/> + <texture_picker label="Pintura corporal inferior" name="lower_bodypaint"/> + <texture_picker label="Ropa interior" name="lower_underpants"/> + <texture_picker label="Calcetines" name="lower_socks"/> + <texture_picker label="Zapatos" name="lower_shoes"/> + <texture_picker label="Pantalones" name="lower_pants"/> + <texture_picker label="Chaqueta" name="lower_jacket"/> + <texture_picker label="Alfa inferior" name="lower_alpha"/> + <texture_picker label="Tatuaje inferior" name="lower_tattoo"/> + <texture_picker label="Falda" name="skirt-baked"/> + <texture_picker label="Falda" name="skirt"/> + </panel> </panel> </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml new file mode 100644 index 0000000000..08ea67d4cb --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_buy_currency_html" title="COMPRAR DINERO"/> diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml index fde4d37caf..7588380148 100644 --- a/indra/newview/skins/default/xui/es/floater_map.xml +++ b/indra/newview/skins/default/xui/es/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title="Minimapa"> +<floater name="Map" title=""> <floater.string name="mini_map_north"> N </floater.string> diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml index 7cb41d3f5b..258f84c361 100644 --- a/indra/newview/skins/default/xui/es/floater_moveview.xml +++ b/indra/newview/skins/default/xui/es/floater_moveview.xml @@ -6,18 +6,48 @@ <string name="walk_back_tooltip"> Caminar de espaldas (cursor abajo o S) </string> + <string name="walk_left_tooltip"> + Caminar a la izq. (pulsa Mayúsculas + cursor izq. o A) + </string> + <string name="walk_right_tooltip"> + Caminar a la der. (pulsa Mayúsculas + cursor der. o D) + </string> <string name="run_forward_tooltip"> Correr hacia adelante (cursor arriba o W) </string> <string name="run_back_tooltip"> Correr de espaldas (cursor abajo o S) </string> + <string name="run_left_tooltip"> + Correr a la izq. (pulsa Mayúsculas + cursor izq. o A) + </string> + <string name="run_right_tooltip"> + Correr a la der. (pulsa Mayúsculas + cursor der. o D) + </string> <string name="fly_forward_tooltip"> Volar hacia adelante (cursor arriba o W) </string> <string name="fly_back_tooltip"> Volar hacia atrás (cursor abajo o S) </string> + <string name="fly_left_tooltip"> + Volar a la izq. (pulsa Mayúsculas + cursor izq. o A) + </string> + <string name="fly_right_tooltip"> + Volar a la der. (pulsa Mayúsculas + cursor der. o D) + </string> + <string name="fly_up_tooltip"> + Volar (pulsa E para subir) + </string> + <string name="fly_down_tooltip"> + Volar (pulsa C para descender) + </string> + <string name="jump_tooltip"> + Saltar (pulsa E) + </string> + <string name="crouch_tooltip"> + Agacharse (pulsa C) + </string> <string name="walk_title"> Caminar </string> @@ -28,10 +58,12 @@ Volar </string> <panel name="panel_actions"> + <button label="" label_selected="" name="move up btn" tool_tip="Volar (pulsa E para subir)"/> <button label="" label_selected="" name="turn left btn" tool_tip="Girar a la izq. (cursor izq. o A)"/> + <joystick_slide name="move left btn" tool_tip="Caminar a la izq. (pulsa Mayúsculas + cursor izq. o A)"/> + <button label="" label_selected="" name="move down btn" tool_tip="Volar (pulsa C para descender)"/> <button label="" label_selected="" name="turn right btn" tool_tip="Girar a la der. (cursor der. o D)"/> - <button label="" label_selected="" name="move up btn" tool_tip="Volar: pulsa E para subir"/> - <button label="" label_selected="" name="move down btn" tool_tip="Volar: pulsa C para descender"/> + <joystick_slide name="move right btn" tool_tip="Caminar a la der. (pulsa Mayúsculas + cursor der. o D)"/> <joystick_turn name="forward btn" tool_tip="Caminar hacia adelante (cursor arriba o W)"/> <joystick_turn name="backward btn" tool_tip="Caminar de espaldas (cursor abajo o S)"/> </panel> diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml index 57ec5eb7b4..d05a023279 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml @@ -9,9 +9,6 @@ <floater.string name="Title"> Nota: [NAME] </floater.string> - <floater.string label="Guardar" label_selected="Guardar" name="Save"> - Guardar - </floater.string> <text name="desc txt"> Descripción: </text> @@ -19,4 +16,5 @@ Cargando... </text_editor> <button label="Guardar" label_selected="Guardar" name="Save"/> + <button label="Borrar" label_selected="Borrar" name="Delete"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 5dc527c29a..9637544f4e 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -67,8 +67,8 @@ <text name="RenderingCost" tool_tip="Muestra cuánto se calcula que cuesta renderizar este objeto"> þ: [COUNT] </text> - <check_box name="checkbox uniform"/> - <text name="checkbox uniform label"> + <check_box label="" name="checkbox uniform"/> + <text label="Estirar ambos lados" name="checkbox uniform label"> Estirar ambos lados </text> <check_box initial_value="true" label="Estirar las texturas" name="checkbox stretch textures"/> @@ -397,8 +397,7 @@ <text name="glow label"> Resplandor </text> - <check_box bottom_delta="-21" label="Brillo al -máximo" name="checkbox fullbright"/> + <check_box bottom_delta="-21" label="Brillo al máximo" name="checkbox fullbright"/> <text name="tex gen"> Detallado </text> @@ -479,14 +478,7 @@ máximo" name="checkbox fullbright"/> Área: [AREA] m² </text> <button label="Acerca del terreno" label_selected="Acerca del terreno" name="button about land"/> - <check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario: - -Verde = Su terreno -Agua = Terreno de sus grupos -Rojo = Propiedad de otros -Amarillo = En venta -Morado = Para subasta -Gris = Público"/> + <check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario: Verde = Su terreno Agua = Terreno de sus grupos Rojo = Propiedad de otros Amarillo = En venta Morado = Para subasta Gris = Público"/> <text name="label_parcel_modify"> Modificar la parcela </text> diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml index 650ac78855..afac8d7fe9 100644 --- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml @@ -5,7 +5,7 @@ <menu_item_call label="Quitar" name="Detach"/> <menu_item_call label="Soltar" name="Drop"/> <menu_item_call label="Levantarme" name="Stand Up"/> - <menu_item_call label="Mi apariencia" name="Appearance..."/> + <menu_item_call label="Cambiar vestuario" name="Change Outfit"/> <menu_item_call label="Mis amigos" name="Friends..."/> <menu_item_call label="Mis grupos" name="Groups..."/> <menu_item_call label="Mi perfil" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml index 5b72498439..d347a7d0c4 100644 --- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml @@ -20,7 +20,9 @@ <context_menu label="Desanexar ▶" name="Object Detach"/> <menu_item_call label="Quitarse todo" name="Detach All"/> </context_menu> - <menu_item_call label="Mi apariencia" name="Appearance..."/> + <menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/> + <menu_item_call label="Editar mi vestuario" name="Edit Outfit"/> + <menu_item_call label="Editar mi anatomía" name="Edit My Shape"/> <menu_item_call label="Mis amigos" name="Friends..."/> <menu_item_call label="Mis grupos" name="Groups..."/> <menu_item_call label="Mi perfil" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/es/menu_bottomtray.xml b/indra/newview/skins/default/xui/es/menu_bottomtray.xml index 8169563882..62683f3076 100644 --- a/indra/newview/skins/default/xui/es/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/es/menu_bottomtray.xml @@ -4,6 +4,11 @@ <menu_item_check label="Botón Moverse" name="ShowMoveButton"/> <menu_item_check label="Botón Vista" name="ShowCameraButton"/> <menu_item_check label="Botón Foto" name="ShowSnapshotButton"/> + <menu_item_check label="Botón Barra lateral" name="ShowSidebarButton"/> + <menu_item_check label="Botón Construir" name="ShowBuildButton"/> + <menu_item_check label="Botón Buscar" name="ShowSearchButton"/> + <menu_item_check label="Botón Mapa" name="ShowWorldMapButton"/> + <menu_item_check label="Botón Minimapa" name="ShowMiniMapButton"/> <menu_item_call label="Cortar" name="NearbyChatBar_Cut"/> <menu_item_call label="Copiar" name="NearbyChatBar_Copy"/> <menu_item_call label="Pegar" name="NearbyChatBar_Paste"/> diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml index af5c17d7cb..4b56984541 100644 --- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="Levantarme" name="stand_up"/> - <menu_item_call label="Mi apariencia" name="my_appearance"/> + <menu_item_call label="Cambiar vestuario" name="change_outfit"/> <menu_item_call label="Mi perfil" name="my_profile"/> <menu_item_call label="Mis amigos" name="my_friends"/> <menu_item_call label="Mis grupos" name="my_groups"/> diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml index ca992fd525..bbee88f600 100644 --- a/indra/newview/skins/default/xui/es/menu_inventory.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory.xml @@ -54,6 +54,7 @@ <menu_item_call label="Eliminar el ítem" name="Purge Item"/> <menu_item_call label="Restaurar el ítem" name="Restore Item"/> <menu_item_call label="Abrir" name="Open"/> + <menu_item_call label="Abrir original" name="Open Original"/> <menu_item_call label="Propiedades" name="Properties"/> <menu_item_call label="Renombrar" name="Rename"/> <menu_item_call label="Copiar la UUID" name="Copy Asset UUID"/> diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml index 101cddc6aa..5386f82ee5 100644 --- a/indra/newview/skins/default/xui/es/menu_login.xml +++ b/indra/newview/skins/default/xui/es/menu_login.xml @@ -2,7 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Yo" name="File"> <menu_item_call label="Preferencias" name="Preferences..."/> - <menu_item_call label="Salir" name="Quit"/> + <menu_item_call label="Salir de [APP_NAME]" name="Quit"/> </menu> <menu label="Ayuda" name="Help"> <menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/> diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml index 0985f308ae..fd8bd05230 100644 --- a/indra/newview/skins/default/xui/es/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/es/menu_participant_list.xml @@ -14,8 +14,8 @@ <context_menu label="Opciones del moderador >" name="Moderator Options"> <menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/> <menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/> - <menu_item_call label="Silenciar a todos los demás" name="ModerateVoiceMuteOthers"/> <menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/> - <menu_item_call label="Quitar el silencio a todos los demás" name="ModerateVoiceUnMuteOthers"/> + <menu_item_call label="Silenciar a todos" name="ModerateVoiceMute"/> + <menu_item_call label="Quitar el silencio a todos" name="ModerateVoiceUnmute"/> </context_menu> </context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index c9ae4def46..1bc3e981ce 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -7,7 +7,7 @@ </menu_item_call> <menu_item_call label="Comprar L$" name="Buy and Sell L$"/> <menu_item_call label="Mi perfil" name="Profile"/> - <menu_item_call label="Mi apariencia" name="Appearance"/> + <menu_item_call label="Cambiar vestuario" name="ChangeOutfit"/> <menu_item_check label="Mi Inventario" name="Inventory"/> <menu_item_check label="Mi Inventario" name="ShowSidetrayInventory"/> <menu_item_check label="Mis gestos" name="Gestures"/> @@ -162,6 +162,7 @@ <menu_item_check label="Objetos flexibles" name="Flexible Objects"/> </menu> <menu_item_check label="Ejecutar múltiples temas" name="Run Multiple Threads"/> + <menu_item_check label="Usar Plugin Read Thread" name="Use Plugin Read Thread"/> <menu_item_call label="Vaciar la caché de grupo" name="ClearGroupCache"/> <menu_item_check label="Vista subjetiva suavizada" name="Mouse Smoothing"/> <menu label="Atajos de teclado" name="Shortcuts"> @@ -188,7 +189,6 @@ <menu_item_call label="Acercar el zoom" name="Zoom In"/> <menu_item_call label="Zoom por defecto" name="Zoom Default"/> <menu_item_call label="Alejar el zoom" name="Zoom Out"/> - <menu_item_call label="Pantalla completa" name="Toggle Fullscreen"/> </menu> <menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/> <menu_item_check label="Mostrar el menú 'Develop'" name="Debug Mode"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 49f30ae807..47dc31f5f4 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -323,6 +323,9 @@ Necesitas una cuenta para entrar en [SECOND_LIFE]. ¿Quieres crear una ahora? </url> <usetemplate name="okcancelbuttons" notext="Volver a intentarlo" yestext="Crear una cuenta nueva"/> </notification> + <notification name="InvalidCredentialFormat"> + Escribe el nombre y apellido de tu avatar en el campo Nombre de usuario e inicia sesión otra vez. + </notification> <notification name="AddClassified"> Los anuncios clasificados aparecen durante una semana en la sección 'Clasificados' de la búsqueda y en [http://secondlife.com/community/classifieds secondlife.com]. Rellena tu anuncio y pulsa 'Publicar...' para añadirlo al directorio. @@ -611,6 +614,11 @@ Podría ser [VALIDS] <notification name="CannotEncodeFile"> No se puede codificar el archivo: [FILE] </notification> + <notification name="CorruptedProtectedDataStore"> + No se pueden leer los datos protegidos, por lo que se están restaurando. + Esto puede deberse a un cambio de configuración de la red. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="CorruptResourceFile"> Archivo con los recursos corruptos: [FILE] </notification> @@ -973,6 +981,12 @@ en TODO EL TERRENO de este sim? Por favor, elige un pago mayor. </notification> + <notification name="ConfirmItemDeleteHasLinks"> + Por lo menos uno de los elementos seleccionados contiene vínculos que le señalan. Si eliminas este elemento, los vínculos dejarán de funcionar permanentemente. Lo más recomendable es eliminar primero los vínculos. + +¿Estás seguro de que quieres eliminar los elementos? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> + </notification> <notification name="ConfirmObjectDeleteLock"> Al menos uno de los ítems que has seleccionado está bloqueado. @@ -1124,6 +1138,42 @@ Por favor, elige el avatar masculino o femenino. Puedes cambiar más adelante tu elección. <usetemplate name="okcancelbuttons" notext="Mujer" yestext="Varón"/> </notification> + <notification name="CantTeleportToGrid"> + No se puede hacer el teleporte a [SLURL] porque se encuentra en una cuadrícula ([GRID]) diferente de la actual ([CURRENT_GRID]). Cierra el visor y vuelve a intentarlo. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GeneralCertificateError"> + No se puede establecer la conexión con el servidor. +[REASON] + +Nombre del asunto: [SUBJECT_NAME_STRING] +Nombre del emisor: [ISSUER_NAME_STRING] +Válido desde: [VALID_FROM] +Válido hasta: [VALID_TO] +Huella digital MD5: [SHA1_DIGEST] +Huella digital SHA1: [MD5_DIGEST] +Uso de la clave: [KEYUSAGE] +Uso de clave extendida: [EXTENDEDKEYUSAGE] +Identificador de clave de asunto: [SUBJECTKEYIDENTIFIER] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TrustCertificateError"> + La autoridad de certificación de este servidor se desconoce. + +Información del certificado: +Nombre del asunto: [SUBJECT_NAME_STRING] +Nombre del emisor: [ISSUER_NAME_STRING] +Válido desde: [VALID_FROM] +Válido hasta: [VALID_TO] +Huella digital MD5: [SHA1_DIGEST] +Huella digital SHA1: [MD5_DIGEST] +Uso de la clave: [KEYUSAGE] +Uso de clave extendida: [EXTENDEDKEYUSAGE] +Identificador de clave de asunto: [SUBJECTKEYIDENTIFIER] + +¿Deseas confiar en esta autoridad? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Confiar"/> + </notification> <notification name="NotEnoughCurrency"> [NAME] cuesta [PRICE] L$. No tienes suficientes L$ para hacer eso. </notification> @@ -1519,7 +1569,7 @@ Por favor, comprueba que tienes instalado el último visor, y dirígete a la Bas <notification name="RegionEntryAccessBlocked_Change"> No estás autorizado en esta región por tus preferencias sobre el nivel de calificación. -Puedes pulsar 'Cambiar las Preferencias' para incrementar las preferencias del nivel de calificación y, así, poder entrar. En adelante, podrás buscar y acceder a contenido [REGIONMATURITY]. Si más adelante quieres deshacer este cambio, ve a Yo > Preferencias > General. +Pulsa 'Cambiar las preferencias' para incrementar las preferencias del nivel de calificación y obtener acceso inmediato. Esto te permitirá buscar contenidos [REGIONMATURITY] y tener acceso a ellos. Si prefieres cambiar esta opción más adelante, puedes hacerlo desde Yo > Preferencias > General. <form name="form"> <button name="OK" text="Cambiar las preferencias"/> <button default="true" name="Cancel" text="Cerrar"/> @@ -1527,7 +1577,7 @@ Puedes pulsar 'Cambiar las Preferencias' para incrementar las preferen </form> </notification> <notification name="PreferredMaturityChanged"> - Tu preferencia actual de calificación es [RATING]. + Tu preferencia de nivel de calificación actual es [RATING]. </notification> <notification name="LandClaimAccessBlocked"> No puedes reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad. @@ -2288,15 +2338,6 @@ Por favor, vuelve a intentarlo en unos momentos. <button name="Mute" text="Ignorar"/> </form> </notification> - <notification name="ObjectGiveItemUnknownUser"> - Un objeto de nombre [OBJECTFROMNAME] propiedad de (un Residente desconocido) te ha dado este [OBJECTTYPE]: -[ITEM_SLURL] - <form name="form"> - <button name="Keep" text="Guardar"/> - <button name="Discard" text="Descartar"/> - <button name="Mute" text="Ignorar"/> - </form> - </notification> <notification name="UserGiveItem"> [NAME_SLURL] te ha dado este [OBJECTTYPE]: [ITEM_SLURL] @@ -2608,8 +2649,51 @@ Se mostrará cuando haya suficiente espacio. <notification name="ShareNotification"> Arrastrar ítems desde el inventario hasta una persona en el perfil del residente. </notification> + <notification name="DeedToGroupFail"> + Error de transferencia a grupo. + </notification> <notification name="AvatarRezNotification"> - Avatar de '[NAME]' obtenido en [TIME] segs. + ( [EXISTENCE] segundos vivo) +El avatar '[NAME]' tardó [TIME] segundos en dejar de aparecer como nube. + </notification> + <notification name="AvatarRezSelfNotification"> + ( [EXISTENCE] segundos vivo) +Has terminado de texturizar tu vestuario en [TIME] segundos. + </notification> + <notification name="AvatarRezCloudNotification"> + ( [EXISTENCE] segundos vivo) +El avatar '[NAME]' se convirtió en nube. + </notification> + <notification name="AvatarRezArrivedNotification"> + ( [EXISTENCE] segundos vivo) +Apareció el avatar '[NAME]'. + </notification> + <notification name="AvatarRezLeftCloudNotification"> + ( [EXISTENCE] segundos vivo) +El avatar '[NAME]' salió al cabo de [TIME] segundos como nube. + </notification> + <notification name="AvatarRezEnteredAppearanceNotification"> + ( [EXISTENCE] segundos vivo) +El avatar '[NAME]' ya está en modo de edición de apariencia. + </notification> + <notification name="AvatarRezLeftAppearanceNotification"> + ( [EXISTENCE] segundos vivo) +El avatar '[NAME]' desactivó el modo de apariencia. + </notification> + <notification name="AvatarRezLeftNotification"> + ( [EXISTENCE] segundos vivo) +El avatar '[NAME]' ya estaba totalmente cargado al salir. + </notification> + <notification name="ConfirmLeaveCall"> + ¿Estás seguro de que deseas salir de esta multiconferencia? + <usetemplate ignoretext="Confirma antes de salir de la llamada" name="okcancelignore" notext="No" yestext="Sí"/> + </notification> + <notification name="ConfirmMuteAll"> + Has seleccionado silenciar a todos los participantes en una multiconferencia. +Si lo haces, todos los residentes que se unan posteriormente a la llamada también serán silenciados, incluso cuando abandones la conferencia. + +¿Deseas silenciar a todos? + <usetemplate ignoretext="Confirma que deseas silenciar a todos los participantes en una multiconferencia." name="okcancelignore" notext="OK" yestext="Cancelar"/> </notification> <global name="UnsupportedCPU"> - La velocidad de tu CPU no cumple los requerimientos mínimos. diff --git a/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml new file mode 100644 index 0000000000..de764d8025 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml new file mode 100644 index 0000000000..66ae7d868b --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="clothing_list_button_bar_panel"> + <button label="Cambiar" name="switch_btn"/> + <button label="Comprar >" name="bodyparts_shop_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray.xml b/indra/newview/skins/default/xui/es/panel_bottomtray.xml index 74dc17f3de..5ea09ed795 100644 --- a/indra/newview/skins/default/xui/es/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/es/panel_bottomtray.xml @@ -1,11 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="bottom_tray"> - <string name="SpeakBtnToolTip"> - Activa/Desactiva el micrófono - </string> - <string name="VoiceControlBtnToolTip"> - Muestra/Oculta el panel del control de voz - </string> + <string name="SpeakBtnToolTip" value="Activa/Desactiva el micrófono"/> + <string name="VoiceControlBtnToolTip" value="Muestra/Oculta el panel del control de voz"/> <layout_stack name="toolbar_stack"> <layout_panel name="speak_panel"> <talk_button name="talk"> @@ -24,6 +20,21 @@ <layout_panel name="snapshot_panel"> <button label="" name="snapshots" tool_tip="Hacer una foto"/> </layout_panel> + <layout_panel name="sidebar_btn_panel"> + <button label="Barra lateral" name="sidebar_btn" tool_tip="Muestra/Oculta la barra lateral"/> + </layout_panel> + <layout_panel name="build_btn_panel"> + <button label="Construir" name="build_btn" tool_tip="Muestra/Oculta las herramientas de construcción"/> + </layout_panel> + <layout_panel name="search_btn_panel"> + <button label="Buscar" name="search_btn" tool_tip="Muestra/Oculta la búsqueda"/> + </layout_panel> + <layout_panel name="world_map_btn_panel"> + <button label="Mapa" name="world_map_btn" tool_tip="Muestra/Oculta el mapa del mundo"/> + </layout_panel> + <layout_panel name="mini_map_btn_panel"> + <button label="Minimapa" name="mini_map_btn" tool_tip="Muestra/Oculta el minimapa"/> + </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> <button name="Unread IM messages" tool_tip="Conversaciones"/> diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml new file mode 100644 index 0000000000..d3b3d31bd9 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="clothing_list_button_bar_panel"> + <button label="Añadir +" name="add_btn"/> + <button label="Comprar >" name="clothing_shop_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml new file mode 100644 index 0000000000..de764d8025 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_cof_wearables.xml b/indra/newview/skins/default/xui/es/panel_cof_wearables.xml new file mode 100644 index 0000000000..a2994894c1 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_cof_wearables.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="cof_wearables"> + <accordion name="cof_wearables_accordion"> + <accordion_tab name="tab_attachments" title="Adjuntos"/> + <accordion_tab name="tab_clothing" title="Ropa"/> + <accordion_tab name="tab_body_parts" title="Partes del cuerpo"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml new file mode 100644 index 0000000000..91d90a5660 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="deletable_wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml new file mode 100644 index 0000000000..6af84de0c7 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="dummy_clothing_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_edit_shape.xml b/indra/newview/skins/default/xui/es/panel_edit_shape.xml index 1a13f928a2..e64ec9ab7c 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_shape.xml @@ -1,14 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shape_panel"> - <panel name="avatar_sex_panel"> - <text name="gender_text"> - Sexo: - </text> - <radio_group name="sex_radio"> - <radio_item label="Mujer" name="radio"/> - <radio_item label="Varón" name="radio2"/> - </radio_group> - </panel> + <text name="avatar_height"> + [HEIGHT] metros de alto + </text> <panel label="Camisa" name="accordion_panel"> <accordion name="wearable_accordion"> <accordion_tab name="shape_body_tab" title="Cuerpo"/> diff --git a/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml index e5e72a11e4..8776dd6c10 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml @@ -4,5 +4,6 @@ <texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/> <texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/> <texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/> + <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml index 97ab566f4d..8bafe0f29a 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml @@ -93,6 +93,12 @@ <text name="edit_wearable_title" value="Modificando la anatomía"/> <panel label="Camisa" name="wearable_type_panel"> <text name="description_text" value="Anatomía:"/> + <radio_group name="sex_radio"> + <radio_item label="" name="sex_male" tool_tip="Varón" value="1"/> + <radio_item label="" name="sex_female" tool_tip="Mujer" value="0"/> + </radio_group> + <icon name="male_icon" tool_tip="Varón"/> + <icon name="female_icon" tool_tip="Mujer"/> </panel> <panel label="gear_buttom_panel" name="gear_buttom_panel"> <button name="friends_viewsort_btn" tool_tip="Opciones"/> diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml index b763e2e74d..f307126b03 100644 --- a/indra/newview/skins/default/xui/es/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/es/panel_group_land_money.xml @@ -6,6 +6,9 @@ <panel.string name="cant_view_group_land_text"> No tienes permiso para ver el terreno propiedad del grupo </panel.string> + <panel.string name="epmty_view_group_land_text"> + No hay entradas + </panel.string> <panel.string name="cant_view_group_accounting_text"> No tienes permiso para ver la información de la cuenta del grupo. </panel.string> diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml index 58e1919782..7a3dbad59e 100644 --- a/indra/newview/skins/default/xui/es/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/es/panel_group_notices.xml @@ -36,6 +36,7 @@ El máximo es de 200 por día y grupo. <text name="string"> Arrastra y suelta aquí un ítem para adjuntarlo: </text> + <button label="Inventario" name="open_inventory" tool_tip="Abrir inventario"/> <button label="Quitar" label_selected="Remover lo anexado" name="remove_attachment" tool_tip="Quita el adjunto de tu aviso"/> <button label="Enviar" label_selected="Enviar" name="send_notice"/> <group_drop_target name="drop_target" tool_tip="Para enviar un ítem con el aviso, arrástralo desde tu inventario hasta este cajetín. Para poder adjuntarlo, debes tener permiso para copiarlo y transferirlo."/> diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml index 0e4f118605..4b45a6f7b8 100644 --- a/indra/newview/skins/default/xui/es/panel_login.xml +++ b/indra/newview/skins/default/xui/es/panel_login.xml @@ -8,18 +8,15 @@ </panel.string> <layout_stack name="login_widgets"> <layout_panel name="login"> - <text name="first_name_text"> - Nombre: + <text name="username_text"> + Nombre de usuario: </text> - <line_editor label="Nombre" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/> - <text name="last_name_text"> - Apellido: - </text> - <line_editor label="Apellido" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/> + <line_editor label="Nombre de usuario" name="username_edit" tool_tip="Nombre de usuario de [SECOND_LIFE]"/> <text name="password_text"> Contraseña: </text> <check_box label="Recordar la contraseña" name="remember_check"/> + <button label="Iniciar sesión" name="connect_btn"/> <text name="start_location_text"> Empezar en: </text> @@ -27,7 +24,6 @@ <combo_box.item label="Mi última posición" name="MyLastLocation"/> <combo_box.item label="Mi Base" name="MyHome"/> </combo_box> - <button label="Iniciar sesión" name="connect_btn"/> </layout_panel> <layout_panel name="links"> <text name="create_new_account_text"> diff --git a/indra/newview/skins/default/xui/es/panel_main_inventory.xml b/indra/newview/skins/default/xui/es/panel_main_inventory.xml index 3a1e96a821..7e318a150b 100644 --- a/indra/newview/skins/default/xui/es/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/es/panel_main_inventory.xml @@ -9,62 +9,20 @@ <text name="ItemcountText"> Ítems: </text> - <menu_bar name="Inventory Menu"> - <menu label="Archivo" name="File"> - <menu_item_call label="Abrir" name="Open"/> - <menu label="Subir" name="upload"> - <menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/> - <menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/> - <menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/> - <menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/> - </menu> - <menu_item_call label="Ventana nueva" name="New Window"/> - <menu_item_call label="Ver los filtros" name="Show Filters"/> - <menu_item_call label="Restablecer los filtros" name="Reset Current"/> - <menu_item_call label="Cerrar todas las carpetas" name="Close All Folders"/> - <menu_item_call label="Vaciar la Papelera" name="Empty Trash"/> - <menu_item_call label="Vaciar Objetos Perdidos" name="Empty Lost And Found"/> - </menu> - <menu label="Crear" name="Create"> - <menu_item_call label="Carpeta nueva" name="New Folder"/> - <menu_item_call label="Script nuevo" name="New Script"/> - <menu_item_call label="Nota nueva" name="New Note"/> - <menu_item_call label="Gesto nuevo" name="New Gesture"/> - <menu label="Ropas nuevas" name="New Clothes"> - <menu_item_call label="Camisa nueva" name="New Shirt"/> - <menu_item_call label="Pantalón nuevo" name="New Pants"/> - <menu_item_call label="Zapatos nuevos" name="New Shoes"/> - <menu_item_call label="Calcetines nuevos" name="New Socks"/> - <menu_item_call label="Chaqueta nueva" name="New Jacket"/> - <menu_item_call label="Falda nueva" name="New Skirt"/> - <menu_item_call label="Guantes nuevos" name="New Gloves"/> - <menu_item_call label="Camiseta nueva" name="New Undershirt"/> - <menu_item_call label="Ropa interior nueva" name="New Underpants"/> - <menu_item_call label="Nueva Alfa" name="New Alpha"/> - <menu_item_call label="Tatuaje nuevo" name="New Tattoo"/> - </menu> - <menu label="Nuevas partes del cuerpo" name="New Body Parts"> - <menu_item_call label="Forma nueva" name="New Shape"/> - <menu_item_call label="Piel nueva" name="New Skin"/> - <menu_item_call label="Pelo nuevo" name="New Hair"/> - <menu_item_call label="Ojos nuevos" name="New Eyes"/> - </menu> - </menu> - <menu label="Ordenar" name="Sort"> - <menu_item_check label="Alfabéticamente" name="By Name"/> - <menu_item_check label="Cronológicamente" name="By Date"/> - <menu_item_check label="Las carpetas siempre alfabéticamente" name="Folders Always By Name"/> - <menu_item_check label="Las carpetas del sistema, arriba" name="System Folders To Top"/> - </menu> - </menu_bar> <filter_editor label="Filtrar" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="Todos los ítems" name="All Items"/> - <inventory_panel label="Ítems recientes" name="Recent Items"/> + <recent_inventory_panel label="Ítems recientes" name="Recent Items"/> </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Mostrar más opciones"/> - <button name="add_btn" tool_tip="Añadir un ítem nuevo"/> - <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/> - </panel> + <layout_stack name="bottom_panel"> + <layout_panel name="options_gear_btn_panel"> + <button name="options_gear_btn" tool_tip="Ver más opciones"/> + </layout_panel> + <layout_panel name="add_btn_panel"> + <button name="add_btn" tool_tip="Añadir un ítem nuevo"/> + </layout_panel> + <layout_panel name="trash_btn_panel"> + <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml index 484f51569b..b7c0e840b2 100644 --- a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml @@ -2,6 +2,8 @@ <!-- Side tray Outfit Edit panel --> <panel label="Editar el vestuario" name="outfit_edit"> <string name="No Outfit" value="No hay vestuario"/> + <string name="unsaved_changes" value="Cambios sin guardar"/> + <string name="now_editing" value="Editando"/> <panel.string name="not_available"> (No disp.) </panel.string> @@ -21,18 +23,13 @@ </panel> <layout_stack name="im_panels"> <layout_panel label="Panel de control de los MI" name="outfit_wearables_panel"> - <scroll_list name="look_items_list"> - <scroll_list.columns label="Vestuario" name="look_item"/> - <scroll_list.columns label="Orden de los ítems del vestuario" name="look_item_sort"/> - </scroll_list> <panel label="bottom_panel" name="edit_panel"/> </layout_panel> <layout_panel name="add_wearables_panel"> - <filter_editor label="Filtrar" name="look_item_filter"/> + <text name="add_to_outfit_label" value="Añadir a vestuario:"/> <layout_stack name="filter_panels"> - <layout_panel label="Panel de control de los MI" name="filter_button_panel"> - <text name="add_to_outfit_label" value="Añadir al vestuario:"/> - <button label="o" name="filter_button"/> + <layout_panel label="Panel de control de MI" name="filter_panel"> + <filter_editor label="Filtrar" name="look_item_filter"/> </layout_panel> </layout_stack> <panel label="add_wearables_button_bar" name="add_wearables_button_bar"> diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml index ad14d8ac9d..13f584ff28 100644 --- a/indra/newview/skins/default/xui/es/panel_people.xml +++ b/indra/newview/skins/default/xui/es/panel_people.xml @@ -2,9 +2,9 @@ <!-- Side tray panel --> <panel label="Gente" name="people_panel"> <string name="no_recent_people" value="No hay nadie reciente. ¿Buscas gente con la que pasar el rato? Prueba la [secondlife:///app/search/people Búsqueda] o el [secondlife:///app/worldmap Mapa del mundo]."/> - <string name="no_filtered_recent_people" value="¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/people Búsqueda]."/> + <string name="no_filtered_recent_people" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar]."/> <string name="no_one_near" value="No hay nadie cerca. ¿Buscas gente con la que pasar el rato? Prueba la [secondlife:///app/search/people Búsqueda] o el [secondlife:///app/worldmap Mapa del mundo]."/> - <string name="no_one_filtered_near" value="¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/people Búsqueda]."/> + <string name="no_one_filtered_near" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar]."/> <string name="no_friends_online" value="No hay amigos conectados"/> <string name="no_friends" value="No hay amigos"/> <string name="no_friends_msg"> @@ -12,11 +12,11 @@ ¿Buscas gente con la que pasar el rato? Prueba el [secondlife:///app/worldmap Mapa del mundo]. </string> <string name="no_filtered_friends_msg"> - ¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/people Búsqueda]. + ¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar]. </string> <string name="people_filter_label" value="Filtrar a la gente"/> <string name="groups_filter_label" value="Filtrar a los grupos"/> - <string name="no_filtered_groups_msg" value="¿No encontraste lo que buscabas? Prueba la [secondlife:///app/search/groups Búsqueda]."/> + <string name="no_filtered_groups_msg" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/groups/[SEARCH_TERM] Buscar]."/> <string name="no_groups_msg" value="¿Buscas grupos en que participar? Prueba la [secondlife:///app/search/groups Búsqueda]."/> <filter_editor label="Filtrar" name="filter_input"/> <tab_container name="tabs"> @@ -55,7 +55,7 @@ <button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/> <button label="MI" name="im_btn" tool_tip="Abrir un mensaje instantáneo"/> <button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/> - <button label="Compartir" name="share_btn"/> + <button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/> <button label="Teleportar" name="teleport_btn" tool_tip="Ofrecer teleporte"/> <button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/> <button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml index e0ce03d09a..c3a23c74c4 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml @@ -13,6 +13,7 @@ </text> <check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara al entrar en o salir del modo de edición"/> <check_box label="Apariencia" name="appearance_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara mientras se está editando"/> + <check_box initial_value="1" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar el posicionamiento automático de la cámara para la barra lateral"/> <check_box label="Verme en vista subjetiva" name="first_person_avatar_visible"/> <check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/> <check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index 7a65eb32bc..fc8c908788 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -45,11 +45,12 @@ </text> <check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/> <check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/> + <check_box label="Permitir el historial de MI y chat en texto sin formato" name="plain_text_chat_history"/> <text name="show_ims_in_label"> - Mostrar los MI en: + Mostrar los MI en: </text> <text name="requires_restart_label"> - (requiere reiniciar) + (requiere reiniciar) </text> <radio_group name="chat_window" tool_tip="Muestra tus mensajes instantáneos en varias ventanas flotantes o en una sola con varias pestañas (requiere que reinicies)"> <radio_item label="Varias ventanas" name="radio" value="0"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml index 56d473e872..183c007a0c 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml @@ -1,8 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Gráficos" name="Display panel"> - <text name="UI Size:"> - Tamaño de la UI: - </text> <text name="QualitySpeed"> Calidad y velocidad: </text> @@ -52,6 +49,10 @@ m </text> <slider label="Núm. máx. de partículas:" name="MaxParticleCount"/> + <slider label="Distancia de dibujo máxima del avatar:" name="MaxAvatarDrawDistance"/> + <text name="DrawDistanceMeterText3"> + m + </text> <slider label="Calidad de procesamiento:" name="RenderPostProcess"/> <text name="MeshDetailText"> Detalle de la malla: @@ -87,8 +88,8 @@ Detalles de iluminación: </text> <radio_group name="LightingDetailRadio"> - <radio_item label="Sólo el Sol y la Luna" name="SunMoon"/> - <radio_item label="Puntos de luz cercanos" name="LocalLights"/> + <radio_item label="Sólo el Sol y la Luna" name="SunMoon" value="0"/> + <radio_item label="Puntos de luz cercanos" name="LocalLights" value="1"/> </radio_group> <text name="TerrainDetailText"> Detalle del terreno: diff --git a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml index 0c7f63d662..db5d47c11e 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml @@ -1,9 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Vestuarios" name="appearance panel"> <string name="No Outfit" value="No hay vestuario"/> + <string name="Unsaved Changes" value="Cambios sin guardar"/> + <string name="Now Wearing" value="Llevas puesto..."/> <panel name="panel_currentlook"> - <text name="currentlook_title"> - (sin guardar) + <button label="F" name="editappearance_btn"/> + <button label="O" name="openoutfit_btn"/> + <text name="currentlook_status"> + (Estado) </text> </panel> <filter_editor label="Filtrar los vestuarios" name="Filter"/> diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml index ff4d201d01..dcaddd8e42 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml @@ -4,6 +4,7 @@ <panel name="button_panel"> <button label="Perfil" name="info_btn"/> <button label="Compartir" name="share_btn"/> + <button label="Comprar" name="shop_btn"/> <button label="Ponerme" name="wear_btn"/> <button label="Play" name="play_btn"/> <button label="Teleporte" name="teleport_btn"/> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 27700b2efe..885e974b3b 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -88,6 +88,24 @@ <string name="LoginDownloadingClothing"> Descargando la ropa... </string> + <string name="InvalidCertificate"> + El servidor devolvió un certificado no válido o dañado. Ponte en contacto con el administrador de la cuadrícula. + </string> + <string name="CertInvalidHostname"> + El nombre de host utilizado para acceder al servidor no es válido. Comprueba tu SLURL o el nombre de host de la cuadrícula. + </string> + <string name="CertExpired"> + Parece que el certificado que devolvió la cuadrícula está caducado. Comprueba el reloj del sistema o consulta al administrador de la cuadrícula. + </string> + <string name="CertKeyUsage"> + El certificado que devolvió el servidor no puede utilizarse para SSL. Ponte en contacto con el administrador de la cuadrícula. + </string> + <string name="CertBasicConstraints"> + La cadena de certificado del servidor contenía demasiados certificados. Ponte en contacto con el administrador de la cuadrícula. + </string> + <string name="CertInvalidSignature"> + No se pudo verificar la firma del certificado devuelta por el servidor de la cuadrícula. Ponte en contacto con el administrador de la cuadrícula. + </string> <string name="LoginFailedNoNetwork"> Error de red: no se ha podido conectar; por favor, revisa tu conexión a Internet. </string> @@ -819,6 +837,42 @@ <string name="invalid"> inválido/a </string> + <string name="shirt_not_worn"> + Camisa no puesta + </string> + <string name="pants_not_worn"> + Pantalones no puestos + </string> + <string name="shoes_not_worn"> + Zapatos no puestos + </string> + <string name="socks_not_worn"> + Calcetines no puestos + </string> + <string name="jacket_not_worn"> + Chaqueta no puesta + </string> + <string name="gloves_not_worn"> + Guantes no puestos + </string> + <string name="undershirt_not_worn"> + Camiseta no puesta + </string> + <string name="underpants_not_worn"> + Ropa interior no puesta + </string> + <string name="skirt_not_worn"> + Falda no puesta + </string> + <string name="alpha_not_worn"> + Alfa no puesta + </string> + <string name="tattoo_not_worn"> + Tatuaje no puesto + </string> + <string name="invalid_not_worn"> + no válido/a + </string> <string name="NewWearable"> Nuevo [WEARABLE_ITEM] </string> @@ -889,7 +943,10 @@ Pulsa ESC para salir de la vista subjetiva </string> <string name="InventoryNoMatchingItems"> - ¿No encontraste lo que buscabas? Prueba en la [secondlife:///app/search/all Búsqueda]. + ¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/all/[SEARCH_TERM] Buscar]. + </string> + <string name="PlacesNoMatchingItems"> + ¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/places/[SEARCH_TERM] Buscar]. </string> <string name="FavoritesNoMatchingItems"> Arrastra aquí un hito para tenerlo en tus favoritos. @@ -919,6 +976,7 @@ <string name="Wave" value="Onda"/> <string name="HelloAvatar" value="¡Hola, avatar!"/> <string name="ViewAllGestures" value="Ver todos >>"/> + <string name="GetMoreGestures" value="Obtener más >>"/> <string name="Animations" value="Animaciones,"/> <string name="Calling Cards" value="Tarjetas de visita,"/> <string name="Clothing" value="Ropa,"/> @@ -1531,16 +1589,19 @@ El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI. </string> <string name="MuteByName"> - (por el nombre) + (Por el nombre) </string> <string name="MuteAgent"> (Residente) </string> <string name="MuteObject"> - (objeto) + (Objeto) </string> <string name="MuteGroup"> - (grupo) + (Grupo) + </string> + <string name="MuteExternal"> + (Externo) </string> <string name="RegionNoCovenant"> No se ha aportado un contrato para este estado. @@ -3300,11 +3361,14 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. <string name="answered_call"> Han respondido a tu llamada </string> - <string name="started_call"> - Llamada de voz iniciada + <string name="you_started_call"> + Has iniciado una llamada de voz + </string> + <string name="you_joined_call"> + Has entrado en la llamada de voz </string> - <string name="joined_call"> - Entrando a la llamada de voz + <string name="name_started_call"> + [NAME] inició una llamada de voz </string> <string name="ringing-im"> Haciendo la llamada de voz... @@ -3503,6 +3567,90 @@ Denuncia de infracción <string name="Contents"> Contenidos </string> + <string name="Gesture"> + Gestos + </string> + <string name="Male Gestures"> + Gestos de hombre + </string> + <string name="Female Gestures"> + Gestos de mujer + </string> + <string name="Other Gestures"> + Otros gestos + </string> + <string name="Speech Gestures"> + Gestos al hablar + </string> + <string name="Common Gestures"> + Gestos corrientes + </string> + <string name="Male - Excuse me"> + Varón - Disculpa + </string> + <string name="Male - Get lost"> + Varón – Déjame en paz + </string> + <string name="Male - Blow kiss"> + Varón - Lanzar un beso + </string> + <string name="Male - Boo"> + Varón - Abucheo + </string> + <string name="Male - Bored"> + Varón - Aburrido + </string> + <string name="Male - Hey"> + Varón – ¡Eh! + </string> + <string name="Male - Laugh"> + Varón - Risa + </string> + <string name="Male - Repulsed"> + Varón - Rechazo + </string> + <string name="Male - Shrug"> + Varón - Encogimiento de hombros + </string> + <string name="Male - Stick tougue out"> + Varón - Sacando la lengua + </string> + <string name="Male - Wow"> + Varón - Admiración + </string> + <string name="FeMale - Excuse me"> + Mujer - Disculpa + </string> + <string name="FeMale - Get lost"> + Mujer – Déjame en paz + </string> + <string name="FeMale - Blow kiss"> + Mujer - Lanzar un beso + </string> + <string name="FeMale - Boo"> + Mujer - Abucheo + </string> + <string name="Female - Bored"> + Mujer - Aburrida + </string> + <string name="Female - Hey"> + Mujer - ¡Eh! + </string> + <string name="Female - Laugh"> + Mujer - Risa + </string> + <string name="Female - Repulsed"> + Mujer - Rechazo + </string> + <string name="Female - Shrug"> + Mujer - Encogimiento de hombros + </string> + <string name="Female - Stick tougue out"> + Mujer - Sacando la lengua + </string> + <string name="Female - Wow"> + Mujer - Admiración + </string> <string name="AvatarBirthDateFormat"> [day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt] </string> diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml index 681fd203f0..a1cbeecfb9 100644 --- a/indra/newview/skins/default/xui/fr/floater_about.xml +++ b/indra/newview/skins/default/xui/fr/floater_about.xml @@ -23,13 +23,13 @@ Cartes graphiques : [GRAPHICS_CARD] Version Windows Graphics Driver : [GRAPHICS_DRIVER_VERSION] </floater.string> <floater.string name="AboutLibs"> - Version OpenGL : [OPENGL_VERSION] + Version OpenGL : [OPENGL_VERSION] Version libcurl : [LIBCURL_VERSION] -Version J2C Decoder : [J2C_VERSION] -Version Audio Driver : [AUDIO_DRIVER_VERSION] -Version Qt Webkit : [QT_WEBKIT_VERSION] -Version Vivox : [VIVOX_VERSION] +Version J2C Decoder : [J2C_VERSION] +Version Audio Driver : [AUDIO_DRIVER_VERSION] +Version Qt Webkit : [QT_WEBKIT_VERSION] +Version serveur vocal : [VOICE_VERSION] </floater.string> <floater.string name="none"> (aucun) diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index 2e52a90373..ff49fd4536 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -62,6 +62,9 @@ <panel.string name="no_selection_text"> Aucune parcelle sélectionnée. </panel.string> + <panel.string name="time_stamp_template"> + [wkday,datetime,local] [day,datetime,local] [mth,datetime,local] [year,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] + </panel.string> <text name="Name:"> Nom : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml index ae8f926d8f..e1786eafc7 100644 --- a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml @@ -3,44 +3,46 @@ <floater.string name="InvalidAvatar"> AVATAR NON VALIDE </floater.string> - <text name="label"> - Textures fixées - </text> - <text name="composite_label"> - Textures composées - </text> - <button label="Vider ces ID dans la console" label_selected="Vider" left="-185" name="Dump" width="175"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <texture_picker label="Cheveux" name="hair-baked"/> - <texture_picker label="Cheveux" name="hair_grain"/> - <texture_picker label="Alpha cheveux" name="hair_alpha"/> - <texture_picker label="Tête" name="head-baked"/> - <texture_picker label="Maquillage" name="head_bodypaint"/> - <texture_picker label="Alpha tête" name="head_alpha"/> - <texture_picker label="Tatouage tête" name="head_tattoo"/> - <texture_picker label="Yeux" name="eyes-baked"/> - <texture_picker label="Œil" name="eyes_iris"/> - <texture_picker label="Alpha yeux" name="eyes_alpha"/> - <texture_picker label="Haut du corps" name="upper-baked"/> - <texture_picker label="Peinture corporelle haut" name="upper_bodypaint"/> - <texture_picker label="Débardeur" name="upper_undershirt"/> - <texture_picker label="Gants" name="upper_gloves"/> - <texture_picker label="Chemise" name="upper_shirt"/> - <texture_picker label="Veste (haut)" name="upper_jacket"/> - <texture_picker label="Alpha haut" name="upper_alpha"/> - <texture_picker label="Tatouage haut" name="upper_tattoo"/> - <texture_picker label="Bas du corps" name="lower-baked"/> - <texture_picker label="Peinture corporelle bas" name="lower_bodypaint"/> - <texture_picker label="Caleçon" name="lower_underpants"/> - <texture_picker label="Chaussettes" name="lower_socks"/> - <texture_picker label="Chaussures" name="lower_shoes"/> - <texture_picker label="Pantalon" name="lower_pants"/> - <texture_picker label="Veste" name="lower_jacket"/> - <texture_picker label="Alpha bas" name="lower_alpha"/> - <texture_picker label="Tatouage bas" name="lower_tattoo"/> - <texture_picker label="Jupe" name="skirt-baked"/> - <texture_picker label="Jupe" name="skirt"/> + <text name="label"> + Textures figées + </text> + <text name="composite_label"> + Textures composites + </text> + <button label="Vider les ID dans la console" label_selected="Vider" name="Dump"/> + <panel name="scroll_content_panel"> + <texture_picker label="Cheveux" name="hair-baked"/> + <texture_picker label="Cheveux" name="hair_grain"/> + <texture_picker label="Alpha cheveux" name="hair_alpha"/> + <texture_picker label="Tête" name="head-baked"/> + <texture_picker label="Maquillage" name="head_bodypaint"/> + <texture_picker label="Alpha tête" name="head_alpha"/> + <texture_picker label="Tatouage tête" name="head_tattoo"/> + <texture_picker label="Yeux" name="eyes-baked"/> + <texture_picker label="Œil" name="eyes_iris"/> + <texture_picker label="Alpha yeux" name="eyes_alpha"/> + <texture_picker label="Haut du corps" name="upper-baked"/> + <texture_picker label="Peinture sur corps (haut)" name="upper_bodypaint"/> + <texture_picker label="Débardeur" name="upper_undershirt"/> + <texture_picker label="Gants" name="upper_gloves"/> + <texture_picker label="Chemise" name="upper_shirt"/> + <texture_picker label="Veste (haut)" name="upper_jacket"/> + <texture_picker label="Alpha haut" name="upper_alpha"/> + <texture_picker label="Tatouage haut" name="upper_tattoo"/> + <texture_picker label="Bas du corps" name="lower-baked"/> + <texture_picker label="Peinture sur corps (bas)" name="lower_bodypaint"/> + <texture_picker label="Caleçon" name="lower_underpants"/> + <texture_picker label="Chaussettes" name="lower_socks"/> + <texture_picker label="Chaussures" name="lower_shoes"/> + <texture_picker label="Pantalon" name="lower_pants"/> + <texture_picker label="Veste" name="lower_jacket"/> + <texture_picker label="Alpha bas" name="lower_alpha"/> + <texture_picker label="Tatouage bas" name="lower_tattoo"/> + <texture_picker label="Jupe" name="skirt-baked"/> + <texture_picker label="Jupe" name="skirt"/> + </panel> </panel> </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml new file mode 100644 index 0000000000..953fca3544 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_buy_currency_html" title="ACHETER DEVISE"/> diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml index 1e0f5672a4..5ead1cae3a 100644 --- a/indra/newview/skins/default/xui/fr/floater_gesture.xml +++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml @@ -22,6 +22,6 @@ <button name="del_btn" tool_tip="Supprimer ce geste"/> </panel> <button label="Modifier" name="edit_btn"/> - <button label="Jouer" name="play_btn"/> + <button label="Lire" name="play_btn"/> <button label="Stop" name="stop_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml index e01b687fce..ae319949e3 100644 --- a/indra/newview/skins/default/xui/fr/floater_map.xml +++ b/indra/newview/skins/default/xui/fr/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title="Mini-carte"> +<floater name="Map" title=""> <floater.string name="mini_map_north"> N </floater.string> diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml index fac569557e..c0f3864b81 100644 --- a/indra/newview/skins/default/xui/fr/floater_moveview.xml +++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml @@ -6,18 +6,48 @@ <string name="walk_back_tooltip"> Marcher en arrière (appuyer sur la flèche vers le bas ou S) </string> + <string name="walk_left_tooltip"> + Marcher vers la gauche (Maj+Flèche gauche ou touche A) + </string> + <string name="walk_right_tooltip"> + Marcher vers la droite (Maj+Flèche droite ou touche D) + </string> <string name="run_forward_tooltip"> Courir vers l'avant (appuyer sur la flèche vers le haut ou W) </string> <string name="run_back_tooltip"> Courir en arrière (appuyer sur la flèche vers le bas ou S) </string> + <string name="run_left_tooltip"> + Courir vers la gauche (Maj+Flèche gauche ou touche A) + </string> + <string name="run_right_tooltip"> + Courir vers la droite (Maj+Flèche droite ou touche D) + </string> <string name="fly_forward_tooltip"> Voler vers l'avant (appuyer sur la flèche vers le haut ou W) </string> <string name="fly_back_tooltip"> Voler vers l'arrière (appuyer sur la flèche vers le bas ou S) </string> + <string name="fly_left_tooltip"> + Voler vers la gauche (Maj+Flèche gauche ou touche A) + </string> + <string name="fly_right_tooltip"> + Voler vers la droite (Maj+Flèche droite ou touche D) + </string> + <string name="fly_up_tooltip"> + Voler vers le haut (touche E) + </string> + <string name="fly_down_tooltip"> + Voler vers le bas (touche C) + </string> + <string name="jump_tooltip"> + Sauter (touche E) + </string> + <string name="crouch_tooltip"> + S'accroupir (touche C) + </string> <string name="walk_title"> Marcher </string> @@ -28,10 +58,12 @@ Voler </string> <panel name="panel_actions"> + <button label="" label_selected="" name="move up btn" tool_tip="Voler vers le haut (touche E)"/> <button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche (appuyer sur la flèche de gauche ou sur A)"/> + <joystick_slide name="move left btn" tool_tip="Marcher vers la gauche (Maj+Flèche gauche ou touche A)"/> + <button label="" label_selected="" name="move down btn" tool_tip="Voler vers le bas (touche C)"/> <button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite (appuyer sur la flèche de droite ou sur D)"/> - <button label="" label_selected="" name="move up btn" tool_tip="Voler vers le haut, appuyer sur E"/> - <button label="" label_selected="" name="move down btn" tool_tip="Voler vers le bas, appuyer sur C"/> + <joystick_slide name="move right btn" tool_tip="Marcher vers la droite (Maj+Flèche droite ou touche D)"/> <joystick_turn name="forward btn" tool_tip="Marcher en avant (appuyer sur la flèche vers le haut ou W)"/> <joystick_turn name="backward btn" tool_tip="Marcher en arrière (appuyer sur la flèche vers le bas ou S)"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml index 489b90eeba..0f3a4541e2 100644 --- a/indra/newview/skins/default/xui/fr/floater_postcard.xml +++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml @@ -13,10 +13,10 @@ </text> <line_editor left="143" name="name_form" width="130" left_delta="146"/> <text name="subject_label"> - Sujet : + Objet : </text> <line_editor left="143" name="subject_form" width="130" left_delta="146"/> - <line_editor label="Saisissez votre sujet ici." name="subject_form"/> + <line_editor label="Saisissez votre objet ici." name="subject_form"/> <text name="msg_label"> Message : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml index d6ec915fd1..5646ad45eb 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml @@ -9,9 +9,6 @@ <floater.string name="Title"> Note : [NAME] </floater.string> - <floater.string label="Enregistrer" label_selected="Enregistrer" name="Save"> - Enregistrer - </floater.string> <text name="desc txt"> Description : </text> @@ -19,4 +16,5 @@ Chargement... </text_editor> <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> + <button label="Supprimer" label_selected="Supprimer" name="Delete"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index cd86e77eb5..c9b8c42dfb 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -67,8 +67,8 @@ <text name="RenderingCost" tool_tip="Affiche le coût du rendu calculé pour cet objet"> þ : [COUNT] </text> - <check_box name="checkbox uniform"/> - <text name="checkbox uniform label"> + <check_box label="" name="checkbox uniform"/> + <text label="Étirer les deux côtés" name="checkbox uniform label"> Étirer les deux côtés </text> <check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/> @@ -444,7 +444,7 @@ <check_box label="Inverser" name="checkbox flip s"/> <spinner label="Vertical (V)" name="TexScaleV"/> <check_box label="Inverser" name="checkbox flip t"/> - <spinner label="Rotation˚" name="TexRot" /> + <spinner label="Rotation˚" name="TexRot"/> <spinner label="Répétitions / Mètre" name="rptctrl"/> <button label="Appliquer" label_selected="Appliquer" name="button apply"/> <text name="tex offset"> diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml index 8bc3182198..ff87d90d4d 100644 --- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml @@ -5,7 +5,7 @@ <menu_item_call label="Détacher" name="Detach"/> <menu_item_call label="Lâcher" name="Drop"/> <menu_item_call label="Me lever" name="Stand Up"/> - <menu_item_call label="Mon apparence" name="Appearance..."/> + <menu_item_call label="Changer de tenue" name="Change Outfit"/> <menu_item_call label="Mes amis" name="Friends..."/> <menu_item_call label="Mes groupes" name="Groups..."/> <menu_item_call label="Mon profil" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml index 17899b491b..3620dc72b0 100644 --- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml @@ -20,7 +20,9 @@ <context_menu label="Détacher ▶" name="Object Detach"/> <menu_item_call label="Tout détacher" name="Detach All"/> </context_menu> - <menu_item_call label="Mon apparence" name="Appearance..."/> + <menu_item_call label="Changer de tenue" name="Chenge Outfit"/> + <menu_item_call label="Modifier ma tenue" name="Edit Outfit"/> + <menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/> <menu_item_call label="Mes amis" name="Friends..."/> <menu_item_call label="Mes groupes" name="Groups..."/> <menu_item_call label="Mon profil" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml b/indra/newview/skins/default/xui/fr/menu_bottomtray.xml index 3229940980..e058c66a17 100644 --- a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/fr/menu_bottomtray.xml @@ -4,6 +4,11 @@ <menu_item_check label="Bouton Bouger" name="ShowMoveButton"/> <menu_item_check label="Bouton Afficher" name="ShowCameraButton"/> <menu_item_check label="Bouton Photo" name="ShowSnapshotButton"/> + <menu_item_check label="Bouton Panneau latéral" name="ShowSidebarButton"/> + <menu_item_check label="Bouton Construire" name="ShowBuildButton"/> + <menu_item_check label="Bouton Rechercher" name="ShowSearchButton"/> + <menu_item_check label="Bouton Carte" name="ShowWorldMapButton"/> + <menu_item_check label="Bouton Mini-carte" name="ShowMiniMapButton"/> <menu_item_call label="Couper" name="NearbyChatBar_Cut"/> <menu_item_call label="Copier" name="NearbyChatBar_Copy"/> <menu_item_call label="Coller" name="NearbyChatBar_Paste"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml index b7dafca5ce..5f570b5608 100644 --- a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="Me lever" name="stand_up"/> - <menu_item_call label="Mon apparence" name="my_appearance"/> + <menu_item_call label="Changer de tenue" name="change_outfit"/> <menu_item_call label="Mon profil" name="my_profile"/> <menu_item_call label="Mes amis" name="my_friends"/> <menu_item_call label="Mes groupes" name="my_groups"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index a7334db46d..4b9a05edd6 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -54,6 +54,7 @@ <menu_item_call label="Purger l'objet" name="Purge Item"/> <menu_item_call label="Restaurer l'objet" name="Restore Item"/> <menu_item_call label="Ouvrir" name="Open"/> + <menu_item_call label="Ouvrir l'original" name="Open Original"/> <menu_item_call label="Propriétés" name="Properties"/> <menu_item_call label="Renommer" name="Rename"/> <menu_item_call label="Copier l'UUID (identifiant universel unique)" name="Copy Asset UUID"/> diff --git a/indra/newview/skins/default/xui/fr/menu_participant_list.xml b/indra/newview/skins/default/xui/fr/menu_participant_list.xml index 4434a8e53d..63d3d39f9c 100644 --- a/indra/newview/skins/default/xui/fr/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/fr/menu_participant_list.xml @@ -14,8 +14,8 @@ <context_menu label="Options du modérateur >" name="Moderator Options"> <menu_item_check label="Autoriser les chats écrits" name="AllowTextChat"/> <menu_item_call label="Ignorer ce participant" name="ModerateVoiceMuteSelected"/> - <menu_item_call label="Ignorer tous les autres" name="ModerateVoiceMuteOthers"/> <menu_item_call label="Ne plus ignorer ce participant" name="ModerateVoiceUnMuteSelected"/> - <menu_item_call label="Ne plus ignorer tous les autres" name="ModerateVoiceUnMuteOthers"/> + <menu_item_call label="Ignorer les autres" name="ModerateVoiceMute"/> + <menu_item_call label="Ne plus ignorer les autres" name="ModerateVoiceUnmute"/> </context_menu> </context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 64270cbe73..4c7cdefbe8 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -7,7 +7,7 @@ </menu_item_call> <menu_item_call label="Acheter des L$" name="Buy and Sell L$"/> <menu_item_call label="Mon profil" name="Profile"/> - <menu_item_call label="Mon apparence" name="Appearance"/> + <menu_item_call label="Changer de tenue" name="ChangeOutfit"/> <menu_item_check label="Mon inventaire" name="Inventory"/> <menu_item_check label="Mon inventaire" name="ShowSidetrayInventory"/> <menu_item_check label="Mes gestes" name="Gestures"/> @@ -162,6 +162,7 @@ <menu_item_check label="Objets flexibles" name="Flexible Objects"/> </menu> <menu_item_check label="Exécuter plusieurs threads" name="Run Multiple Threads"/> + <menu_item_check label="Utiliser le thread de lecture de plug-in" name="Use Plugin Read Thread"/> <menu_item_call label="Effacer le cache du groupe" name="ClearGroupCache"/> <menu_item_check label="Effet de lissage de la souris" name="Mouse Smoothing"/> <menu label="Raccourcis" name="Shortcuts"> @@ -188,7 +189,6 @@ <menu_item_call label="Zoomer en avant" name="Zoom In"/> <menu_item_call label="Zoom par défaut" name="Zoom Default"/> <menu_item_call label="Zoomer en arrière" name="Zoom Out"/> - <menu_item_call label="Activer/Quitter le plein écran" name="Toggle Fullscreen"/> </menu> <menu_item_call label="Afficher les paramètres de débogage" name="Debug Settings"/> <menu_item_check label="Afficher le menu Développeurs" name="Debug Mode"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index d38afe13d2..4c4c01f34a 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -283,7 +283,7 @@ Pour ne placer le média que sur une seule face, choisissez Sélectionner une fa Veuillez saisir votre adresse e-mail. </notification> <notification name="PromptMissingSubjMsg"> - Envoyer la photo avec le sujet ou le message par défaut ? + Envoyer la photo avec l'objet ou le message par défaut ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> </notification> <notification name="ErrorProcessingSnapshot"> @@ -325,6 +325,9 @@ Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en crée </url> <usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/> </notification> + <notification name="InvalidCredentialFormat"> + Saisissez à la fois le prénom et le nom de votre avatar dans le champ Nom d'utilisateur, puis connectez-vous. + </notification> <notification name="AddClassified"> Les petites annonces sont publiées à l'onglet Petites annonces de la section Recherche et sur [http://secondlife.com/community/classifieds secondlife.com] pendant une semaine. Rédigez votre annonce, puis cliquez sur Publier pour l'ajouter à la liste des annonces. @@ -608,6 +611,11 @@ Assurez-vous que le fichier a l'extension correcte. <notification name="CannotEncodeFile"> Impossible d'encoder le fichier : [FILE] </notification> + <notification name="CorruptedProtectedDataStore"> + Impossible de lire vos données protégées ; elles sont en cours de réinitialisation. + Cette situation peut se produire lorsque vous changez la configuration du réseau. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="CorruptResourceFile"> Fichier ressource corrompu : [FILE] </notification> @@ -963,6 +971,12 @@ Proposer à [NAME] de devenir votre ami(e) ? Veuillez saisir un montant plus élevé. </notification> + <notification name="ConfirmItemDeleteHasLinks"> + Des articles liés pointent vers au moins un article sélectionné. Les liens arrêteront définitivement de fonctionner si vous supprimez cet article. Il est vivement conseillé de supprimer d'abord ces liens. + +Voulez-vous vraiment supprimer ces articles ? + <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> + </notification> <notification name="ConfirmObjectDeleteLock"> Au moins un des objets que vous avez sélectionnés est verrouillé. @@ -1111,6 +1125,42 @@ Choisissez un avatar homme ou femme. Vous pourrez revenir sur votre décision plus tard. <usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/> </notification> + <notification name="CantTeleportToGrid"> + Téléportation vers [SLURL] impossible car cet endroit existe sur une grille ([GRID]) différente de la grille actuelle ([CURRENT_GRID]). Veuillez fermer votre client et réessayer. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GeneralCertificateError"> + Connexion au serveur impossible. +[REASON] + +Nom du sujet : [SUBJECT_NAME_STRING] +Émetteur : [ISSUER_NAME_STRING] +Début de validité : [VALID_FROM] +Fin de validité : [VALID_TO] +Empreinte MD5 : [SHA1_DIGEST] +Empreinte SHA1 : [MD5_DIGEST] +Utilisation de la clé : [KEYUSAGE] +Utilisation étendue de la clé : [EXTENDEDKEYUSAGE] +Identifiant de la clé du sujet : [SUBJECTKEYIDENTIFIER] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TrustCertificateError"> + Autorité de certification de ce serveur inconnue. + +Informations sur le certificat : +Nom du sujet : [SUBJECT_NAME_STRING] +Émetteur : [ISSUER_NAME_STRING] +Début de validité : [VALID_FROM] +Fin de validité : [VALID_TO] +Empreinte MD5 : [SHA1_DIGEST] +Empreinte SHA1 : [MD5_DIGEST] +Utilisation de la clé : [KEYUSAGE] +Utilisation étendue de la clé : [EXTENDEDKEYUSAGE] +Identifiant de la clé du sujet : [SUBJECTKEYIDENTIFIER] + +Approuver cette autorité ? + <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Approuver"/> + </notification> <notification name="NotEnoughCurrency"> [NAME] [PRICE] L$ Vous n'avez pas suffisamment de L$ pour faire cela. </notification> @@ -1503,9 +1553,9 @@ Souhaitez-vous en savoir plus sur les différentes catégories d'accès ? Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région. </notification> <notification name="RegionEntryAccessBlocked_Change"> - Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région. + La catégorie de contenu définie dans vos préférences ne vous permet pas de pénétrer dans cette région. -En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Moi > Préférences > Général. +Pour cela, cliquez sur Modifier les préférences afin de spécifier une catégorie plus élevée. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour modifier ce paramètre ultérieurement, accédez à Moi > Préférences > Général, le moment voulu. <form name="form"> <button name="OK" text="Modifier les préférences"/> <button default="true" name="Cancel" text="Fermer"/> @@ -2279,15 +2329,6 @@ Veuillez réessayer dans quelques minutes. <button name="Mute" text="Ignorer"/> </form> </notification> - <notification name="ObjectGiveItemUnknownUser"> - Un objet appelé [OBJECTFROMNAME] appartenant à (un résident inconnu) vous a donné un [OBJECTTYPE] : -[ITEM_SLURL] - <form name="form"> - <button name="Keep" text="Garder"/> - <button name="Discard" text="Jeter"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> <notification name="UserGiveItem"> [NAME_SLURL] vous a donné un [OBJECTTYPE] : [ITEM_SLURL] @@ -2600,8 +2641,52 @@ Le bouton sera affiché quand il y aura suffisamment de place. <notification name="ShareNotification"> Faire glisser des articles de l'inventaire sur une personne dans le sélecteur de résident </notification> + <notification name="DeedToGroupFail"> + Échec de cession au groupe. + </notification> <notification name="AvatarRezNotification"> - Avatar [NAME] rezzé en [TIME] secondes. + ([EXISTENCE] secondes d'existence) +Nuage de l'avatar [NAME] disparu en [TIME] secondes. + </notification> + <notification name="AvatarRezSelfNotification"> + ([EXISTENCE] secondes d'existence) +Vous avez terminé de figer votre tenue en [TIME] secondes. + </notification> + <notification name="AvatarRezCloudNotification"> + ([EXISTENCE] secondes d'existence) +Transformation de l'avatar [NAME] en nuage. + </notification> + <notification name="AvatarRezArrivedNotification"> + ([EXISTENCE] secondes d'existence) +L'avatar [NAME] est apparu. + </notification> + <notification name="AvatarRezLeftCloudNotification"> + ([EXISTENCE] secondes d'existence) +Départ de l'avatar [NAME] après [TIME] secondes sous forme de nuage. + </notification> + <notification name="AvatarRezEnteredAppearanceNotification"> + ([EXISTENCE] secondes d'existence) +L'avatar [NAME] est entré en mode Apparence. + </notification> + <notification name="AvatarRezLeftAppearanceNotification"> + ([EXISTENCE] secondes d'existence) +L'avatar [NAME] a quitté le mode Apparence. + </notification> + <notification name="AvatarRezLeftNotification"> + ([EXISTENCE] secondes d'existence) +Départ de l'avatar [NAME] entièrement chargé. + </notification> + <notification name="ConfirmLeaveCall"> + Voulez-vous vraiment quitter cet appel ? + <usetemplate ignoretext="Confirmer avant de quitter l'appel" name="okcancelignore" notext="Non" yestext="Oui"/> + </notification> + <notification name="ConfirmMuteAll"> + Vous avez choisi d'ignorer l'ensemble des participants de l'appel du groupe. +Les résidents rejoignant l'appel ultérieurement seront également +ignorés, même si vous quittez l'appel. + +Ignorer les autres ? + <usetemplate ignoretext="Confirmer avant d'ignorer les autres lors d'un appel de groupe" name="okcancelignore" notext="Ok" yestext="Annuler"/> </notification> <global name="UnsupportedCPU"> - Votre processeur ne remplit pas les conditions minimum requises. diff --git a/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml new file mode 100644 index 0000000000..de764d8025 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml new file mode 100644 index 0000000000..afd9001df0 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="clothing_list_button_bar_panel"> + <button label="Permuter" name="switch_btn"/> + <button label="Acheter >" name="bodyparts_shop_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml b/indra/newview/skins/default/xui/fr/panel_bottomtray.xml index d3e4afd6ee..328b97ee72 100644 --- a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/fr/panel_bottomtray.xml @@ -1,11 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="bottom_tray"> - <string name="SpeakBtnToolTip"> - Active/Désactive le micro - </string> - <string name="VoiceControlBtnToolTip"> - Affiche/Masque le panneau de contrôle vocal - </string> + <string name="SpeakBtnToolTip" value="Active/Désactive le micro"/> + <string name="VoiceControlBtnToolTip" value="Affiche/Masque le panneau de contrôle de la voix"/> <layout_stack name="toolbar_stack"> <layout_panel name="speak_panel"> <talk_button name="talk"> @@ -24,6 +20,21 @@ <layout_panel name="snapshot_panel"> <button label="" name="snapshots" tool_tip="Prendre une photo"/> </layout_panel> + <layout_panel name="sidebar_btn_panel"> + <button label="Panneau latéral" name="sidebar_btn" tool_tip="Affiche/Masque le panneau latéral"/> + </layout_panel> + <layout_panel name="build_btn_panel"> + <button label="Construire" name="build_btn" tool_tip="Affiche/Masque les outils pour la construction"/> + </layout_panel> + <layout_panel name="search_btn_panel"> + <button label="Rechercher" name="search_btn" tool_tip="Affiche/Masque la recherche"/> + </layout_panel> + <layout_panel name="world_map_btn_panel"> + <button label="Carte" name="world_map_btn" tool_tip="Affiche/Masque la carte du monde"/> + </layout_panel> + <layout_panel name="mini_map_btn_panel"> + <button label="Mini-carte" name="mini_map_btn" tool_tip="Affiche/Masque la mini-carte"/> + </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> <button name="Unread IM messages" tool_tip="Conversations"/> diff --git a/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml new file mode 100644 index 0000000000..24cb92dde7 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="clothing_list_button_bar_panel"> + <button label="Ajouter +" name="add_btn"/> + <button label="Acheter >" name="clothing_shop_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml new file mode 100644 index 0000000000..de764d8025 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml b/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml new file mode 100644 index 0000000000..c1085aa461 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="cof_wearables"> + <accordion name="cof_wearables_accordion"> + <accordion_tab name="tab_attachments" title="Éléments attachés"/> + <accordion_tab name="tab_clothing" title="Habits"/> + <accordion_tab name="tab_body_parts" title="Parties du corps"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml new file mode 100644 index 0000000000..91d90a5660 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="deletable_wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml new file mode 100644 index 0000000000..6af84de0c7 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="dummy_clothing_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml index 98f48887a9..88f0635d97 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml @@ -1,14 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shape_panel"> - <panel name="avatar_sex_panel"> - <text name="gender_text"> - Sexe : - </text> - <radio_group name="sex_radio"> - <radio_item label="Femme" name="radio"/> - <radio_item label="Homme" name="radio2"/> - </radio_group> - </panel> + <text name="avatar_height"> + Taille : [HEIGHT] mètres + </text> <panel label="Chemise" name="accordion_panel"> <accordion name="wearable_accordion"> <accordion_tab name="shape_body_tab" title="Corps"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml index 7ab2aa6bc9..9a6939e6b7 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Tatouage tête" name="Head Tattoo" width="76" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage haut" name="Upper Tattoo" width="80" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage bas" name="Lower Tattoo" width="76" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image" width="76"/> + <texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image" width="80"/> + <texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image" width="76"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml index 3e581f387c..e0762bd791 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml @@ -93,6 +93,12 @@ <text name="edit_wearable_title" value="Modification de la silhouette"/> <panel label="Chemise" name="wearable_type_panel"> <text name="description_text" value="Silhouette :"/> + <radio_group name="sex_radio"> + <radio_item label="" name="sex_male" tool_tip="Homme" value="1"/> + <radio_item label="" name="sex_female" tool_tip="Femme" value="0"/> + </radio_group> + <icon name="male_icon" tool_tip="Homme"/> + <icon name="female_icon" tool_tip="Femme"/> </panel> <panel label="gear_buttom_panel" name="gear_buttom_panel"> <button name="friends_viewsort_btn" tool_tip="Options"/> diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml index a10eaf9d18..192dd799ba 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml @@ -6,6 +6,9 @@ <panel.string name="cant_view_group_land_text"> Vous n'avez pas la permission de voir quel terrain possède ce groupe </panel.string> + <panel.string name="epmty_view_group_land_text"> + Aucune entrée + </panel.string> <panel.string name="cant_view_group_accounting_text"> Vous n'avez pas la permission d'accéder aux informations financières de ce groupe. </panel.string> diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml index 35a5caaa92..bcb6abcac6 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml @@ -42,6 +42,7 @@ Vous pouvez désactiver la réception des notices dans l'onglet Général. <text name="string"> Faire glisser l'objet et le déposer ici pour le joindre : </text> + <button label="Inventaire" name="open_inventory" tool_tip="Ouvrir l'inventaire"/> <button label="Supprimer" label_selected="Supprimer pièce-jointe" name="remove_attachment" tool_tip="Supprimer la pièce jointe de votre notification"/> <button label="Envoyer" label_selected="Envoyer" left="200" name="send_notice" width="100"/> <group_drop_target name="drop_target" tool_tip="Faites glisser un objet de l'inventaire jusqu'à cette case pour l'envoyer avec la notice. Vous devez avoir l'autorisation de copier et transférer l'objet pour pouvoir le joindre."/> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index 8569a544fa..f5847e0ee0 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -8,18 +8,15 @@ </panel.string> <layout_stack name="login_widgets"> <layout_panel name="login"> - <text name="first_name_text"> - Prénom : + <text name="username_text"> + Nom d'utilisateur : </text> - <line_editor label="Prénom" name="first_name_edit" tool_tip="Prénom [SECOND_LIFE]"/> - <text name="last_name_text"> - Nom : - </text> - <line_editor label="Nom :" name="last_name_edit" tool_tip="Nom [SECOND_LIFE]"/> + <line_editor label="Nom d'utilisateur" name="username_edit" tool_tip="Nom d'utilisateur [SECOND_LIFE]"/> <text name="password_text"> Mot de passe : </text> <check_box label="Enregistrer" name="remember_check"/> + <button label="Connexion" name="connect_btn"/> <text name="start_location_text"> Lieu de départ : </text> @@ -28,7 +25,6 @@ <combo_box.item label="Domicile" name="MyHome"/> <combo_box.item label="<Saisissez le nom de la région>" name="Typeregionname"/> </combo_box> - <button label="Connexion" name="connect_btn"/> </layout_panel> <layout_panel name="links"> <text name="create_new_account_text"> diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml index 6cd9db2a5e..f631cf8b85 100644 --- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml @@ -9,62 +9,20 @@ <text name="ItemcountText"> Objets : </text> - <menu_bar name="Inventory Menu"> - <menu label="Fichier" name="File"> - <menu_item_call label="Ouvrir" name="Open"/> - <menu label="Charger" name="upload"> - <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/> - <menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/> - <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> - <menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> - </menu> - <menu_item_call label="Nouvelle fenêtre" name="New Window"/> - <menu_item_call label="Afficher les filtres" name="Show Filters"/> - <menu_item_call label="Réinitialiser les filtres" name="Reset Current"/> - <menu_item_call label="Fermer tous les dossiers" name="Close All Folders"/> - <menu_item_call label="Vider la corbeille" name="Empty Trash"/> - <menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/> - </menu> - <menu label="Créer" name="Create"> - <menu_item_call label="Nouveau dossier" name="New Folder"/> - <menu_item_call label="Nouveau script" name="New Script"/> - <menu_item_call label="Nouvelle note" name="New Note"/> - <menu_item_call label="Nouveau geste" name="New Gesture"/> - <menu label="Nouveaux habits" name="New Clothes"> - <menu_item_call label="Nouvelle chemise" name="New Shirt"/> - <menu_item_call label="Nouveau pantalon" name="New Pants"/> - <menu_item_call label="Nouvelles chaussures" name="New Shoes"/> - <menu_item_call label="Nouvelles chaussettes" name="New Socks"/> - <menu_item_call label="Nouvelle veste" name="New Jacket"/> - <menu_item_call label="Nouvelle jupe" name="New Skirt"/> - <menu_item_call label="Nouveaux gants" name="New Gloves"/> - <menu_item_call label="Nouveau débardeur" name="New Undershirt"/> - <menu_item_call label="Nouveau caleçon" name="New Underpants"/> - <menu_item_call label="Nouvel alpha" name="New Alpha"/> - <menu_item_call label="Nouveau tatouage" name="New Tattoo"/> - </menu> - <menu label="Nouvelles parties du corps" name="New Body Parts"> - <menu_item_call label="Nouvelle silhouette" name="New Shape"/> - <menu_item_call label="Nouvelle peau" name="New Skin"/> - <menu_item_call label="Nouveaux cheveux" name="New Hair"/> - <menu_item_call label="Nouveaux yeux" name="New Eyes"/> - </menu> - </menu> - <menu label="Trier" name="Sort"> - <menu_item_check label="Par nom" name="By Name"/> - <menu_item_check label="Par date" name="By Date"/> - <menu_item_check label="Dossiers toujours par nom" name="Folders Always By Name"/> - <menu_item_check label="Dossiers système en premier" name="System Folders To Top"/> - </menu> - </menu_bar> <filter_editor label="Filtrer l'inventaire" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="MON INVENTAIRE" name="All Items"/> - <inventory_panel label="RÉCENT" name="Recent Items"/> + <recent_inventory_panel label="RÉCENT" name="Recent Items"/> </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> - <button name="add_btn" tool_tip="Ajouter un nouvel article"/> - <dnd_button name="trash_btn" tool_tip="Supprimer l'article sélectionné"/> - </panel> + <layout_stack name="bottom_panel"> + <layout_panel name="options_gear_btn_panel"> + <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> + </layout_panel> + <layout_panel name="add_btn_panel"> + <button name="add_btn" tool_tip="Ajouter un nouvel article"/> + </layout_panel> + <layout_panel name="trash_btn_panel"> + <dnd_button name="trash_btn" tool_tip="Supprimer l'article sélectionné"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml index 31e1906f01..4c869d05c8 100644 --- a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml @@ -2,6 +2,8 @@ <!-- Side tray Outfit Edit panel --> <panel label="Modification de la tenue" name="outfit_edit"> <string name="No Outfit" value="Pas de tenue"/> + <string name="unsaved_changes" value="Modifications non enregistrées"/> + <string name="now_editing" value="Modification"/> <panel.string name="not_available"> (s/o) </panel.string> @@ -21,18 +23,13 @@ </panel> <layout_stack name="im_panels"> <layout_panel label="Panneau de contrôle IM" name="outfit_wearables_panel"> - <scroll_list name="look_items_list"> - <scroll_list.columns label="Article de la tenue" name="look_item"/> - <scroll_list.columns label="Tri des articles de la tenue" name="look_item_sort"/> - </scroll_list> <panel label="bottom_panel" name="edit_panel"/> </layout_panel> <layout_panel name="add_wearables_panel"> - <filter_editor label="Filtre" name="look_item_filter"/> + <text name="add_to_outfit_label" value="Ajouter à la tenue :"/> <layout_stack name="filter_panels"> - <layout_panel label="Panneau de contrôle IM" name="filter_button_panel"> - <text name="add_to_outfit_label" value="Ajouter à la tenue :"/> - <button label="F" name="filter_button"/> + <layout_panel label="Panneau de contrôle IM" name="filter_panel"> + <filter_editor label="Filtre" name="look_item_filter"/> </layout_panel> </layout_stack> <panel label="add_wearables_button_bar" name="add_wearables_button_bar"> diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml index e1ba2990cc..186ca51772 100644 --- a/indra/newview/skins/default/xui/fr/panel_people.xml +++ b/indra/newview/skins/default/xui/fr/panel_people.xml @@ -2,9 +2,9 @@ <!-- Side tray panel --> <panel label="Résidents" name="people_panel"> <string name="no_recent_people" value="Personne de récent. Pour rechercher des résidents avec qui passer du temps, voir [secondlife:///app/search/people Rechercher] ou [secondlife:///app/worldmap Carte du monde]."/> - <string name="no_filtered_recent_people" value="Vous n'avez pas trouvé ce que vous cherchiez ? Utilisez [secondlife:///app/search/people Rechercher]."/> + <string name="no_filtered_recent_people" value="Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/people/Rechercher [SEARCH_TERM]]."/> <string name="no_one_near" value="Personne près de vous. Pour rechercher des résidents avec qui passer du temps, voir [secondlife:///app/search/people Rechercher] ou [secondlife:///app/worldmap Carte du monde]."/> - <string name="no_one_filtered_near" value="Vous n'avez pas trouvé ce que vous cherchiez ? Utilisez [secondlife:///app/search/people Rechercher]."/> + <string name="no_one_filtered_near" value="Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/people/Rechercher [SEARCH_TERM]]."/> <string name="no_friends_online" value="Pas d'amis connectés"/> <string name="no_friends" value="Pas d'amis"/> <string name="no_friends_msg"> @@ -12,11 +12,11 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife:///app/worldmap Carte du monde]. </string> <string name="no_filtered_friends_msg"> - Vous n'avez pas trouvé ce que vous cherchiez ? Utilisez [secondlife:///app/search/people Rechercher]. + Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/people/Rechercher [SEARCH_TERM]]. </string> <string name="people_filter_label" value="Filtrer les personnes"/> <string name="groups_filter_label" value="Filtrer les groupes"/> - <string name="no_filtered_groups_msg" value="Vous n'avez pas trouvé ce que vous cherchiez ? Utilisez [secondlife:///app/search/groups Rechercher]."/> + <string name="no_filtered_groups_msg" value="Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/groups/Rechercher [SEARCH_TERM]]."/> <string name="no_groups_msg" value="Vous souhaitez trouver des groupes à rejoindre ? Utilisez [secondlife:///app/search/groups Rechercher]."/> <filter_editor label="Filtre" name="filter_input"/> <tab_container name="tabs"> @@ -55,7 +55,7 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife:// <button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/> <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/> <button label="Appeler" name="call_btn" tool_tip="Appeler ce résident"/> - <button label="Partager" name="share_btn"/> + <button label="Partager" name="share_btn" tool_tip="Partager un article d'inventaire"/> <button label="Téléporter" name="teleport_btn" tool_tip="Proposez une téléportation"/> <button label="Profil" name="group_info_btn" tool_tip="Voir le profil du groupe"/> <button label="Chat" name="chat_btn" tool_tip="Ouvrir une session de chat"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index 97f5d1ad91..2a7691ea0a 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -13,6 +13,7 @@ </text> <check_box label="Construire/Éditer" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/> <check_box label="Apparence" name="appearance_camera_movement" tool_tip="Utiliser le positionnement automatique de la caméra quand je suis en mode Édition"/> + <check_box initial_value="1" label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/> <check_box label="Afficher en vue subjective" name="first_person_avatar_visible"/> <check_box label="Les touches de direction me font toujours me déplacer" name="arrow_keys_move_avatar_check"/> <check_box label="Appuyer deux fois et maintenir enfoncé pour courir" name="tap_tap_hold_to_run"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml index 64635fbac0..76f3319525 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -45,7 +45,7 @@ </text> <check_box initial_value="true" label="Jouer l'animation clavier quand vous écrivez" name="play_typing_animation"/> <check_box label="M'envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/> - <check_box label="Activer l'historique des chats en texte brut" name="plain_text_chat_history"/> + <check_box label="Activer l'historique des chats et des IM en texte brut" name="plain_text_chat_history"/> <text name="show_ims_in_label"> Afficher les IM dans : </text> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml index 450ad64ae4..c7caf5c2ff 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml @@ -1,19 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Graphiques" name="Display panel"> - <text name="WindowSizeLabel"> - Taille de la fenêtre : - </text> - <check_box label="Utiliser le plein écran" name="windowed mode"/> - <combo_box name="windowsize combo"> - <combo_box.item label="640 x 480" name="640x480"/> - <combo_box.item label="800 x 600" name="800x600"/> - <combo_box.item label="720 x 480 (NTSC)" name="720x480"/> - <combo_box.item label="768 x 576 (PAL)" name="768x576"/> - <combo_box.item label="1024 x 768" name="1024x768"/> - </combo_box> - <text name="UI Size:"> - Taille de l'interface : - </text> <text name="QualitySpeed"> Qualité et vitesse : </text> @@ -63,6 +49,10 @@ m </text> <slider label="Nombre de particules max. :" label_width="147" name="MaxParticleCount"/> + <slider label="Limite d'affichage max des avatars :" name="MaxAvatarDrawDistance"/> + <text name="DrawDistanceMeterText3"> + m + </text> <slider label="Qualité post-traitement :" name="RenderPostProcess"/> <text name="MeshDetailText"> Détails des rendus : @@ -98,8 +88,8 @@ Sources lumineuses : </text> <radio_group name="LightingDetailRadio"> - <radio_item label="Soleil et lune uniquement" name="SunMoon"/> - <radio_item label="Lumières à proximité" name="LocalLights"/> + <radio_item label="Soleil et lune uniquement" name="SunMoon" value="0"/> + <radio_item label="Lumières à proximité" name="LocalLights" value="1"/> </radio_group> <text left="380" name="TerrainDetailText"> Rendu du terrain : diff --git a/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml b/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml index 60fd63bffc..69cb6cd53d 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml @@ -1,16 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Tenues" name="appearance panel"> <string name="No Outfit" value="Aucune tenue"/> + <string name="Unsaved Changes" value="Modifications non enregistrées"/> + <string name="Now Wearing" value="Vous portez désormais..."/> <panel name="panel_currentlook"> - <button label="Éditer" name="editappearance_btn"/> - <text name="currentlook_title"> - (non enregistré) + <button label="M" name="editappearance_btn"/> + <button label="O" name="openoutfit_btn"/> + <text name="currentlook_status"> + (État) </text> <text name="currentlook_name"> Ma tenue avec un nom très long comme ORIGNAL </text> </panel> <filter_editor label="Filtrer les tenues" name="Filter"/> - <button label="Porter" name="wear_btn"/> - <button label="Nouvelle tenue" name="newlook_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml index f92f142c64..893b64d4b2 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml @@ -4,6 +4,7 @@ <panel name="button_panel"> <button label="Profil" name="info_btn"/> <button label="Partager" name="share_btn"/> + <button label="Acheter" name="shop_btn"/> <button label="Porter" name="wear_btn"/> <button label="Jouer" name="play_btn"/> <button label="Téléporter" name="teleport_btn"/> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 8bbb5f6be5..742f024d0d 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -100,6 +100,24 @@ <string name="LoginDownloadingClothing"> Habits en cours de téléchargement... </string> + <string name="InvalidCertificate"> + Certificat non valide ou corrompu renvoyé par le serveur. Contactez l'administrateur de la grille. + </string> + <string name="CertInvalidHostname"> + Nom d'hôte non valide utilisé pour accéder au serveur. Vérifiez votre nom d'hôte de grille ou SLURL. + </string> + <string name="CertExpired"> + Il semble que le certificat renvoyé par la grille ait expiré. Vérifiez votre horloge système ou contactez l'administrateur de la grille. + </string> + <string name="CertKeyUsage"> + Impossible d'utiliser le certificat renvoyé par le serveur pour SSL. Contactez l'administrateur de la grille. + </string> + <string name="CertBasicConstraints"> + Certificats trop nombreux dans la chaîne des certificats du serveur. Contactez l'administrateur de la grille. + </string> + <string name="CertInvalidSignature"> + Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille. Contactez l'administrateur de la grille. + </string> <string name="LoginFailedNoNetwork"> Erreur réseau : impossible d'établir la connexion. Veuillez vérifier votre connexion réseau. </string> @@ -840,6 +858,42 @@ <string name="invalid"> non valide </string> + <string name="shirt_not_worn"> + Chemise non portée + </string> + <string name="pants_not_worn"> + Pantalon non porté + </string> + <string name="shoes_not_worn"> + Chaussures non portées + </string> + <string name="socks_not_worn"> + Chaussettes non portées + </string> + <string name="jacket_not_worn"> + Veste non portée + </string> + <string name="gloves_not_worn"> + Gants non portés + </string> + <string name="undershirt_not_worn"> + Débardeur non porté + </string> + <string name="underpants_not_worn"> + Caleçon non porté + </string> + <string name="skirt_not_worn"> + Jupe non portée + </string> + <string name="alpha_not_worn"> + Alpha non porté + </string> + <string name="tattoo_not_worn"> + Tatouage non porté + </string> + <string name="invalid_not_worn"> + non valide + </string> <string name="NewWearable"> Nouv. [WEARABLE_ITEM] </string> @@ -910,7 +964,10 @@ Appuyez sur ESC pour quitter la vue subjective </string> <string name="InventoryNoMatchingItems"> - Vous n'avez pas trouvé ce que vous cherchiez ? Utilisez [secondlife:///app/search/all Rechercher]. + Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/all/Rechercher [SEARCH_TERM]]. + </string> + <string name="PlacesNoMatchingItems"> + Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/places/Rechercher [SEARCH_TERM]]. </string> <string name="FavoritesNoMatchingItems"> Faites glisser un repère ici pour l'ajouter à vos Favoris. @@ -946,6 +1003,7 @@ <string name="Wave" value=" Faire signe"/> <string name="HelloAvatar" value=" Bonjour, avatar !"/> <string name="ViewAllGestures" value=" Tout afficher >>"/> + <string name="GetMoreGestures" value="Plus >>"/> <string name="Animations" value=" Animations,"/> <string name="Calling Cards" value=" Cartes de visite,"/> <string name="Clothing" value=" Habits,"/> @@ -1575,6 +1633,9 @@ <string name="MuteGroup"> (groupe) </string> + <string name="MuteExternal"> + (externe) + </string> <string name="RegionNoCovenant"> Il n'y a aucun règlement pour ce domaine. </string> @@ -3390,11 +3451,14 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="answered_call"> Votre appel a fait l'objet d'une réponse </string> - <string name="started_call"> - A appelé quelqu'un + <string name="you_started_call"> + Vous appelez. + </string> + <string name="you_joined_call"> + Vous avez rejoint l'appel </string> - <string name="joined_call"> - A rejoint l'appel + <string name="name_started_call"> + [NAME] appelle. </string> <string name="ringing-im"> En train de rejoindre l'appel... @@ -3605,6 +3669,90 @@ de l'infraction signalée <string name="Contents"> Contenus </string> + <string name="Gesture"> + Geste + </string> + <string name="Male Gestures"> + Gestes masculins + </string> + <string name="Female Gestures"> + Gestes féminins + </string> + <string name="Other Gestures"> + Autres gestes + </string> + <string name="Speech Gestures"> + Gestes liés à la parole + </string> + <string name="Common Gestures"> + Gestes communs + </string> + <string name="Male - Excuse me"> + Homme - Demander pardon + </string> + <string name="Male - Get lost"> + Homme - Dire d'aller au diable + </string> + <string name="Male - Blow kiss"> + Homme - Envoyer un baiser + </string> + <string name="Male - Boo"> + Homme - Hou ! + </string> + <string name="Male - Bored"> + Homme - Ennui + </string> + <string name="Male - Hey"> + Homme - Hé ! + </string> + <string name="Male - Laugh"> + Homme - Rire + </string> + <string name="Male - Repulsed"> + Homme - Dégoût + </string> + <string name="Male - Shrug"> + Homme - Hausser les épaules + </string> + <string name="Male - Stick tougue out"> + Homme - Tirer la langue + </string> + <string name="Male - Wow"> + Homme - Ouah ! + </string> + <string name="FeMale - Excuse me"> + Femme - Demander pardon + </string> + <string name="FeMale - Get lost"> + Femme - Dire d'aller au diable + </string> + <string name="FeMale - Blow kiss"> + Femme - Envoyer un baiser + </string> + <string name="FeMale - Boo"> + Femme - Hou ! + </string> + <string name="Female - Bored"> + Femme - Ennui + </string> + <string name="Female - Hey"> + Femme - Hé ! + </string> + <string name="Female - Laugh"> + Femme - Rire + </string> + <string name="Female - Repulsed"> + Femme - Dégoût + </string> + <string name="Female - Shrug"> + Femme - Hausser les épaules + </string> + <string name="Female - Stick tougue out"> + Femme - Tirer la langue + </string> + <string name="Female - Wow"> + Femme - Ouah ! + </string> <string name="AvatarBirthDateFormat"> [day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt] </string> diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index 8e1beb263c..c55f79738e 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -142,7 +142,7 @@ Vai al menu Mondo > Informazioni sul terreno oppure seleziona un altro appezz <button label="Compra Pass..." label_selected="Compra Pass..." left="130" name="Buy Pass..." tool_tip="Un pass ti da un accesso temporaneo in questo territorio." width="125"/> <button label="Abbandona la terra" name="Abandon Land..."/> <button label="Reclama la terra" name="Reclaim Land..."/> - <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di proprietà, con contenuto impostato, e non già messa all'asta."/> + <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di proprietà, con contenuto impostato, e non già messa all'asta."/> </panel> <panel label="REGOLAMENTO" name="land_covenant_panel"> <panel.string name="can_resell"> @@ -427,7 +427,17 @@ Media: <check_box label="Fai ripetere il video" left="265" name="media_loop" tool_tip="Fai ripetere il video continuamente. Quando il video è finito, reinizierà dal principio."/> </panel> <panel label="SUONO" name="land_audio_panel"> + <text name="MusicURL:"> + URL musica: + </text> <check_box label="Nascondi URL" name="hide_music_url" tool_tip="Questa opzione consente di nascondere l'url della musica a chi non è autorizzato a visionare le informazioni di questo parcel."/> + <text name="Sound:"> + Audio: + </text> + <check_box label="Limita l'audio per oggetti e gesture a questo lotto" name="check sound local"/> + <text name="Voice settings:"> + Voce: + </text> <check_box label="Attiva voce" name="parcel_enable_voice_channel"/> <check_box label="Attiva voce (stabilito dalla proprietà)" name="parcel_enable_voice_channel_is_estate_disabled"/> <check_box label="Limita il chat vocale a questo lotto" name="parcel_enable_voice_channel_local"/> @@ -460,7 +470,20 @@ Media: <spinner label="Prezzo in L$:" name="PriceSpin"/> <spinner label="Ore di accesso:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> + <text label="Consenti sempre" name="AllowedText"> + Residenti consentiti + </text> <name_list name="AccessList" tool_tip="([LISTED] in lista, [MAX] max)"/> + <button label="Aggiungi" name="add_allowed"/> + <button label="Rimuovi" label_selected="Rimuovi" name="remove_allowed"/> + </panel> + <panel name="Banned_layout_panel"> + <text label="Espelli" name="BanCheck"> + Residenti con divieto + </text> + <name_list name="BannedList" tool_tip="([LISTED] in lista, [MAX] max)"/> + <button label="Aggiungi" name="add_banned"/> + <button label="Rimuovi" label_selected="Rimuovi" name="remove_banned"/> </panel> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml index 31cfb5c339..d2765eb0c8 100644 --- a/indra/newview/skins/default/xui/ja/floater_about.xml +++ b/indra/newview/skins/default/xui/ja/floater_about.xml @@ -29,7 +29,7 @@ libcurl バージョン: [LIBCURL_VERSION] J2C デコーダバージョン: [J2C_VERSION] オーディオドライババージョン: [AUDIO_DRIVER_VERSION] Qt Webkit バージョン: [QT_WEBKIT_VERSION] -Vivox バージョン: [VIVOX_VERSION] +ボイスサーバーバージョン: [VOICE_VERSION] </floater.string> <floater.string name="none"> (なし) diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index d23ab3565b..2f5065c05f 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -62,6 +62,9 @@ <panel.string name="no_selection_text"> 区画が選択されていません。 </panel.string> + <panel.string name="time_stamp_template"> + [year,datetime,local] [mth,datetime,local] [day,datetime,local] [wkday,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] + </panel.string> <text name="Name:"> 名前: </text> @@ -308,10 +311,10 @@ (なし) </panel.string> <panel.string name="push_restrict_text"> - プッシングを制限 + プッシュ禁止 </panel.string> <panel.string name="push_restrict_region_text"> - プッシングを制限 (地域設定優先) + プッシュ禁止 (地域設定優先) </panel.string> <text name="allow_label"> 他の住人への許可: @@ -337,7 +340,7 @@ 土地オプション: </text> <check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/> - <check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を防ぐことができます。"/> + <check_box label="プッシュ禁止" name="PushRestrictCheck" tool_tip="スクリプトによるプッシュを禁止します。 このオプションを選択することにより、あなたの土地での破壊的行動を防ぐことができます。"/> <check_box label="検索に区画を表示(週 L$ 30)" name="ShowDirectoryCheck" tool_tip="この区画を検索結果に表示します"/> <combo_box name="land category with adult"> <combo_box.item label="全カテゴリ" name="item0"/> @@ -355,7 +358,7 @@ <combo_box.item label="その他" name="item12"/> </combo_box> <combo_box name="land category"> - <combo_box.item label="全カテゴリー" name="item0"/> + <combo_box.item label="全カテゴリ" name="item0"/> <combo_box.item label="Linden 所在地" name="item1"/> <combo_box.item label="アート&カルチャー" name="item3"/> <combo_box.item label="ビジネス" name="item4"/> @@ -379,7 +382,7 @@ <button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地点の設定を行います。この区画内に立って行ってください。"/> <button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリア"/> <text name="Teleport Routing: "> - テレポート制限: + テレポート経路: </text> <combo_box name="landing type" tool_tip="テレポート経路 -- あなたの土地へのテレポート経路を選択"> <combo_box.item label="不可" name="Blocked"/> diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml index 0ea913e66a..17ba39588e 100644 --- a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml @@ -3,44 +3,48 @@ <floater.string name="InvalidAvatar"> 無効なアバター </floater.string> - <text name="label" width="100"> - ベークドテクスチャ - </text> - <text name="composite_label" width="128"> - 合成テクスチャ - </text> - <button label="テクスチャID一覧をコンソールに書き込む" label_selected="捨てる" name="Dump" width="200"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <texture_picker label="髪" name="hair-baked"/> - <texture_picker label="髪" name="hair_grain"/> - <texture_picker label="髪のアルファ" name="hair_alpha"/> - <texture_picker label="頭" name="head-baked"/> - <texture_picker label="メイクアップ" name="head_bodypaint"/> - <texture_picker label="頭部のアルファ" name="head_alpha"/> - <texture_picker label="頭部のタトゥー" name="head_tattoo"/> - <texture_picker label="目" name="eyes-baked"/> - <texture_picker label="目" name="eyes_iris"/> - <texture_picker label="目のアルファ" name="eyes_alpha"/> - <texture_picker label="上半身" name="upper-baked"/> - <texture_picker label="上半身のボディペイント" name="upper_bodypaint"/> - <texture_picker label="下着シャツ" name="upper_undershirt"/> - <texture_picker label="手袋" name="upper_gloves"/> - <texture_picker label="シャツ" name="upper_shirt"/> - <texture_picker label="上着" name="upper_jacket"/> - <texture_picker label="アルファ(上)" name="upper_alpha"/> - <texture_picker label="上部のタトゥー" name="upper_tattoo"/> - <texture_picker label="下半身" name="lower-baked"/> - <texture_picker label="下半身のボディペイント" name="lower_bodypaint"/> - <texture_picker label="下着パンツ" name="lower_underpants"/> - <texture_picker label="靴下" name="lower_socks"/> - <texture_picker label="靴" name="lower_shoes"/> - <texture_picker label="パンツ" name="lower_pants"/> - <texture_picker label="ジャケット" name="lower_jacket"/> - <texture_picker label="アルファ(下)" name="lower_alpha"/> - <texture_picker label="下部のタトゥー" name="lower_tattoo"/> - <texture_picker label="スカート" name="skirt-baked"/> - <texture_picker label="スカート" name="skirt"/> + <text name="label"> + ベークド +テクスチャ + </text> + <text name="composite_label"> + 合成 +テクスチャ + </text> + <button label="テクスチャ ID 一覧をコンソールに書き込む" label_selected="ダンプ" name="Dump"/> + <panel name="scroll_content_panel"> + <texture_picker label="髪" name="hair-baked"/> + <texture_picker label="髪" name="hair_grain"/> + <texture_picker label="髪のアルファ" name="hair_alpha"/> + <texture_picker label="頭" name="head-baked"/> + <texture_picker label="メイクアップ" name="head_bodypaint"/> + <texture_picker label="頭部のアルファ" name="head_alpha"/> + <texture_picker label="頭部のタトゥー" name="head_tattoo"/> + <texture_picker label="目" name="eyes-baked"/> + <texture_picker label="目" name="eyes_iris"/> + <texture_picker label="目のアルファ" name="eyes_alpha"/> + <texture_picker label="上半身" name="upper-baked"/> + <texture_picker label="ボディペイント(上)" name="upper_bodypaint"/> + <texture_picker label="下着シャツ" name="upper_undershirt"/> + <texture_picker label="手袋" name="upper_gloves"/> + <texture_picker label="シャツ" name="upper_shirt"/> + <texture_picker label="上着" name="upper_jacket"/> + <texture_picker label="アルファ(上)" name="upper_alpha"/> + <texture_picker label="上部のタトゥー" name="upper_tattoo"/> + <texture_picker label="下半身" name="lower-baked"/> + <texture_picker label="ボディペイント(下)" name="lower_bodypaint"/> + <texture_picker label="下着パンツ" name="lower_underpants"/> + <texture_picker label="靴下" name="lower_socks"/> + <texture_picker label="靴" name="lower_shoes"/> + <texture_picker label="パンツ" name="lower_pants"/> + <texture_picker label="ジャケット" name="lower_jacket"/> + <texture_picker label="アルファ(下)" name="lower_alpha"/> + <texture_picker label="下部のタトゥー" name="lower_tattoo"/> + <texture_picker label="スカート" name="skirt-baked"/> + <texture_picker label="スカート" name="skirt"/> + </panel> </panel> </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml new file mode 100644 index 0000000000..37fd6826e5 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_buy_currency_html" title="通貨の購入"/> diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml index 8d920a3c3f..79e211c31e 100644 --- a/indra/newview/skins/default/xui/ja/floater_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title="ミニマップ"> +<floater name="Map" title=""> <floater.string name="mini_map_north"> 北 </floater.string> diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml index 20aec48541..6a9d427830 100644 --- a/indra/newview/skins/default/xui/ja/floater_moveview.xml +++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml @@ -6,18 +6,48 @@ <string name="walk_back_tooltip"> 後ろに歩く(下矢印か S を押す) </string> + <string name="walk_left_tooltip"> + 左に歩く(Shift + 左矢印か A を押す) + </string> + <string name="walk_right_tooltip"> + 右に歩く(Shift + 右矢印か D を押す) + </string> <string name="run_forward_tooltip"> 前に走る(上矢印か W を押す) </string> <string name="run_back_tooltip"> 後ろに走る(下矢印か S を押す) </string> + <string name="run_left_tooltip"> + 左を向く(Shift + 左矢印か A を押す) + </string> + <string name="run_right_tooltip"> + 右に走る(Shift + 右矢印か D を押す) + </string> <string name="fly_forward_tooltip"> 前に飛ぶ(上矢印か W を押す) </string> <string name="fly_back_tooltip"> 後ろに飛ぶ(下矢印か S を押す) </string> + <string name="fly_left_tooltip"> + 左に移動(Shift + 左矢印か A を押す) + </string> + <string name="fly_right_tooltip"> + 右を向く(Shift + 右矢印か D を押す) + </string> + <string name="fly_up_tooltip"> + 上に移動(E を押す) + </string> + <string name="fly_down_tooltip"> + 下に移動(C を押す) + </string> + <string name="jump_tooltip"> + ジャンプ(E を押す) + </string> + <string name="crouch_tooltip"> + かがむ(C を押す) + </string> <string name="walk_title"> 歩く </string> @@ -28,10 +58,12 @@ 飛ぶ </string> <panel name="panel_actions"> + <button label="" label_selected="" name="move up btn" tool_tip="上に移動(E を押す)"/> <button label="" label_selected="" name="turn left btn" tool_tip="左を向く(左矢印か A を押す)"/> + <joystick_slide name="move left btn" tool_tip="左に歩く(Shift + 左矢印か A を押す)"/> + <button label="" label_selected="" name="move down btn" tool_tip="下に移動(C を押す)"/> <button label="" label_selected="" name="turn right btn" tool_tip="右を向く(右矢印か D を押す)"/> - <button label="" label_selected="" name="move up btn" tool_tip="飛ぶ・E を押す"/> - <button label="" label_selected="" name="move down btn" tool_tip="着地・C を押す"/> + <joystick_slide name="move right btn" tool_tip="右に歩く(Shift + 右矢印か D を押す)"/> <joystick_turn name="forward btn" tool_tip="前に進む(上矢印か W を押す)"/> <joystick_turn name="backward btn" tool_tip="後ろに歩く(下矢印か S を押す)"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/floater_postcard.xml b/indra/newview/skins/default/xui/ja/floater_postcard.xml index 5a2b047fe0..9d9b59fa51 100644 --- a/indra/newview/skins/default/xui/ja/floater_postcard.xml +++ b/indra/newview/skins/default/xui/ja/floater_postcard.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="スナップショットをメール"> +<floater name="Postcard" title="スナップショットをEメールで送信"> <text name="to_label"> - 住人のメール: + 受信先のEメール: </text> <line_editor left="145" name="to_form" width="125"/> <text name="from_label"> - あなたのメール: + あなたのEメール: </text> <line_editor left="145" name="from_form" width="125"/> <text name="name_label"> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml index 6e6e04c7d8..ae8ae9f7b5 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml @@ -9,9 +9,6 @@ <floater.string name="Title"> ノートカード: [NAME] </floater.string> - <floater.string label="保存" label_selected="保存" name="Save"> - 保存 - </floater.string> <text name="desc txt"> 説明: </text> @@ -19,4 +16,5 @@ ローディング... </text_editor> <button label="保存" label_selected="保存" name="Save"/> + <button label="削除" label_selected="削除" name="Delete"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index a7e687abeb..d095dee974 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -49,7 +49,7 @@ </text> <radio_group name="focus_radio_group"> <radio_item label="ズーム" name="radio zoom"/> - <radio_item label="軌跡(Ctrl)" name="radio orbit"/> + <radio_item label="旋回(Ctrl)" name="radio orbit"/> <radio_item label="水平・垂直移動 (Ctrl + Shift)" name="radio pan"/> </radio_group> <radio_group name="move_radio_group"> @@ -67,11 +67,11 @@ <text name="RenderingCost" tool_tip="このオブジェクトにかかるレンダリングコストを表示"> þ: [COUNT] </text> - <check_box left="116" name="checkbox uniform"/> - <text name="checkbox uniform label"> - 両側を引伸ばす + <check_box label="" left="116" name="checkbox uniform"/> + <text label="両側を延ばす" name="checkbox uniform label"> + 両側を延ばす </text> - <check_box initial_value="true" label="テクスチャを引伸ばす" name="checkbox stretch textures"/> + <check_box initial_value="true" label="テクスチャを引き延ばす" name="checkbox stretch textures"/> <check_box initial_value="true" label="グリッドにスナップ" left_delta="27" name="checkbox snap to grid"/> <combo_box left_delta="60" name="combobox grid mode" tool_tip="オブジェクトの配置に使うグリッドルーラを選択します" width="76"> <combo_box.item label="インワールドグリッド" name="World"/> @@ -87,7 +87,7 @@ <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="半円柱"/> <button label="" label_selected="" name="ToolCone" tool_tip="円錐"/> <button label="" label_selected="" name="ToolHemiCone" tool_tip="半円錐"/> - <button label="" label_selected="" name="ToolSphere" tool_tip="球形"/> + <button label="" label_selected="" name="ToolSphere" tool_tip="球体"/> <button label="" label_selected="" name="ToolHemiSphere" tool_tip="半球"/> <button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/> <button label="" label_selected="" name="ToolTube" tool_tip="チューブ"/> @@ -267,7 +267,7 @@ <combo_box.item label="ボックス" name="Box"/> <combo_box.item label="シリンダー" name="Cylinder"/> <combo_box.item label="プリズム" name="Prism"/> - <combo_box.item label="球形" name="Sphere"/> + <combo_box.item label="球体" name="Sphere"/> <combo_box.item label="トーラス" name="Torus"/> <combo_box.item label="チューブ" name="Tube"/> <combo_box.item label="リング" name="Ring"/> @@ -350,7 +350,7 @@ </text> <combo_box name="sculpt type control"> <combo_box.item label="(なし)" name="None"/> - <combo_box.item label="球形" name="Sphere"/> + <combo_box.item label="球体" name="Sphere"/> <combo_box.item label="トーラス" name="Torus"/> <combo_box.item label="平面" name="Plane"/> <combo_box.item label="シリンダー" name="Cylinder"/> diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml index 72c91da479..48200cb53f 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml @@ -5,7 +5,7 @@ <menu_item_call label="取り外す" name="Detach"/> <menu_item_call label="下に落とす" name="Drop"/> <menu_item_call label="立ち上がる" name="Stand Up"/> - <menu_item_call label="容姿" name="Appearance..."/> + <menu_item_call label="アウトフィットを変更" name="Change Outfit"/> <menu_item_call label="フレンド" name="Friends..."/> <menu_item_call label="グループ" name="Groups..."/> <menu_item_call label="プロフィール" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index c856cdccb9..83d3ec567e 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -20,7 +20,9 @@ <context_menu label="取り外す ▶" name="Object Detach"/> <menu_item_call label="すべて取り外す" name="Detach All"/> </context_menu> - <menu_item_call label="容姿" name="Appearance..."/> + <menu_item_call label="アウトフィットを変更" name="Chenge Outfit"/> + <menu_item_call label="アウトフィットの編集" name="Edit Outfit"/> + <menu_item_call label="シェイプの編集" name="Edit My Shape"/> <menu_item_call label="フレンド" name="Friends..."/> <menu_item_call label="グループ" name="Groups..."/> <menu_item_call label="プロフィール" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml index ea7ba1b741..0e69671f06 100644 --- a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml @@ -4,6 +4,11 @@ <menu_item_check label="移動ボタン" name="ShowMoveButton"/> <menu_item_check label="視界ボタン" name="ShowCameraButton"/> <menu_item_check label="スナップショットボタン" name="ShowSnapshotButton"/> + <menu_item_check label="サイドバーのボタン" name="ShowSidebarButton"/> + <menu_item_check label="制作のボタン" name="ShowBuildButton"/> + <menu_item_check label="検索のボタン" name="ShowSearchButton"/> + <menu_item_check label="地図のボタン" name="ShowWorldMapButton"/> + <menu_item_check label="ミニマップのボタン" name="ShowMiniMapButton"/> <menu_item_call label="切り取り" name="NearbyChatBar_Cut"/> <menu_item_call label="コピー" name="NearbyChatBar_Copy"/> <menu_item_call label="貼り付け" name="NearbyChatBar_Paste"/> diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml index 8867e5ccd6..ee054673c5 100644 --- a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="立ち上がる" name="stand_up"/> - <menu_item_call label="容姿" name="my_appearance"/> + <menu_item_call label="アウトフィットを変更" name="change_outfit"/> <menu_item_call label="プロフィール" name="my_profile"/> <menu_item_call label="フレンド" name="my_friends"/> <menu_item_call label="グループ" name="my_groups"/> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index bfb5023cf7..452d0567da 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -54,6 +54,7 @@ <menu_item_call label="アイテムを除外する" name="Purge Item"/> <menu_item_call label="アイテムを復元する" name="Restore Item"/> <menu_item_call label="開く" name="Open"/> + <menu_item_call label="オリジナルを開きます" name="Open Original"/> <menu_item_call label="プロパティ" name="Properties"/> <menu_item_call label="名前を変更する" name="Rename"/> <menu_item_call label="UUID をコピーする" name="Copy Asset UUID"/> diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml index 3d0368245e..3ef83756cb 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml @@ -10,12 +10,12 @@ <menu_item_call label="支払う" name="Pay"/> <menu_item_check label="人のアイコン表示" name="View Icons"/> <menu_item_check label="ボイスをブロック" name="Block/Unblock"/> - <menu_item_check label="文字をブロックする" name="MuteText"/> + <menu_item_check label="文字をブロック" name="MuteText"/> <context_menu label="モデレーターのオプション >" name="Moderator Options"> <menu_item_check label="文字チャットを許可" name="AllowTextChat"/> <menu_item_call label="この参加者をミュートする" name="ModerateVoiceMuteSelected"/> - <menu_item_call label="他の人全員をミュートする" name="ModerateVoiceMuteOthers"/> <menu_item_call label="この参加者のミュートを解除する" name="ModerateVoiceUnMuteSelected"/> - <menu_item_call label="他の人全員のミュートを解除する" name="ModerateVoiceUnMuteOthers"/> + <menu_item_call label="全員をミュート" name="ModerateVoiceMute"/> + <menu_item_call label="全員のミュート解除" name="ModerateVoiceUnmute"/> </context_menu> </context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index 760128408d..f6695d2d13 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -7,7 +7,7 @@ </menu_item_call> <menu_item_call label="L$ の購入" name="Buy and Sell L$"/> <menu_item_call label="プロフィール" name="Profile"/> - <menu_item_call label="容姿" name="Appearance"/> + <menu_item_call label="アウトフィットを変更" name="ChangeOutfit"/> <menu_item_check label="持ち物" name="Inventory"/> <menu_item_check label="持ち物" name="ShowSidetrayInventory"/> <menu_item_check label="ジェスチャー" name="Gestures"/> @@ -163,6 +163,7 @@ <menu_item_check label="フレキシブルオブジェクト" name="Flexible Objects"/> </menu> <menu_item_check label="マルチスレッド処理" name="Run Multiple Threads"/> + <menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/> <menu_item_call label="グループキャッシュのクリア" name="ClearGroupCache"/> <menu_item_check label="マウスの平滑化" name="Mouse Smoothing"/> <menu label="ショートカット" name="Shortcuts"> @@ -189,7 +190,6 @@ <menu_item_call label="ズームイン" name="Zoom In"/> <menu_item_call label="ズーム(デフォルト)" name="Zoom Default"/> <menu_item_call label="ズームアウト" name="Zoom Out"/> - <menu_item_call label="全画面表示" name="Toggle Fullscreen"/> </menu> <menu_item_call label="デバッグ設定を表示する" name="Debug Settings"/> <menu_item_check label="開発メニューを表示する" name="Debug Mode"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 7adc5e3a78..5d162eb80f 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -348,6 +348,9 @@ L$ が不足しているのでこのグループに参加することができ </url> <usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/> </notification> + <notification name="InvalidCredentialFormat"> + 「ユーザー名」欄にアバターのファーストネームとラストネーム両方を入力してからログインしてください。 + </notification> <notification name="AddClassified"> クラシファイド広告は、検索ディレクトリと [http://secondlife.com/community/classifieds secondlife.com] の「クラシファイド広告」セクションに一週間掲載されます。 広告を記入したら、「掲載...」をクリックしてディレクトリに追加してください。 @@ -635,6 +638,11 @@ L$ が不足しているのでこのグループに参加することができ <notification name="CannotEncodeFile"> 次のファイルのエンコードができません: [FILE] </notification> + <notification name="CorruptedProtectedDataStore"> + あなたの保護されたデータを読みとることが出来ないためリセットされます。 + ネットワーク設定を変更すると起こることがあります。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="CorruptResourceFile"> 破損したリソースファイル: [FILE] </notification> @@ -1000,6 +1008,12 @@ L$ は返金されません。 金額を増やしてください。 </notification> + <notification name="ConfirmItemDeleteHasLinks"> + ここにリンクされたアイテムが少なくとも1つあります。 このアイテムを削除するとここにリンクされたものが機能しなくなります。 リンクを先に削除することを強くお勧めします。 + +これらのアイテムを削除しますか? + <usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/> + </notification> <notification name="ConfirmObjectDeleteLock"> 選択したアイテムのうち、少なくとも 1 つがロックされています。 @@ -1157,6 +1171,42 @@ F1 キーを押してください。 あなたの決定は後で変更できます。 <usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/> </notification> + <notification name="CantTeleportToGrid"> + 現在のグリッド([CURRENT_GRID])とはグリッド([GRID])が異なるため、[SLURL] にテレポートできませんでした。 ビューワを閉じてからもう一度お試しください。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GeneralCertificateError"> + サーバーに接続できませんでした。 +[REASON] + +サブジェクト名: [SUBJECT_NAME_STRING] +発行元: [ISSUER_NAME_STRING] +有効日: [VALID_FROM] +次の更新日: [VALID_TO] +MD5 フィンガープリント: [SHA1_DIGEST] +SHA1 フィンガープリント: [MD5_DIGEST] +キー使用法: [KEYUSAGE] +拡張キー使用法: [EXTENDEDKEYUSAGE] +サブジェクトキー認識別子: [SUBJECTKEYIDENTIFIER] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TrustCertificateError"> + このサーバーの認証機関は不明です。 + +認証情報: +サブジェクト名: [SUBJECT_NAME_STRING] +発行元: [ISSUER_NAME_STRING] +有効日: [VALID_FROM] +次の更新日: [VALID_TO] +MD5 フィンガープリント: [SHA1_DIGEST] +SHA1 フィンガープリント: [MD5_DIGEST] +キー使用法: [KEYUSAGE] +拡張キー使用法: [EXTENDEDKEYUSAGE] +サブジェクトキー認識別子: [SUBJECTKEYIDENTIFIER] + +この認証局を信頼しますか? + <usetemplate name="okcancelbuttons" notext="キャンセル" yestext="信用する"/> + </notification> <notification name="NotEnoughCurrency"> [NAME] L$[PRICE] 残高不足のため実行不可です。 </notification> @@ -1552,9 +1602,9 @@ F1 キーを押してください。 あなたのレーティング区分により、そのリージョン(地域)へは入ることができません。 </notification> <notification name="RegionEntryAccessBlocked_Change"> - あなたのレーティング区分設定により、そのリージョン(地域)へは入ることができません。 + あなたのレーティング区分設定に基づいて、そのリージョンへは入ることができません。 -「設定を変更」をクリックしてあなたのレーティング区分を上げると、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。 あとで設定を元に戻したい場合は、「編集」>「環境設定」をご覧ください。 +「設定を変更」をクリックしてレーティング区分の設定を変更すればすぐに入れます。 変更に伴って [REGIONMATURITY] コンテンツの検索やアクセスが可能になります。 あとで設定を変更したい場合は ミー > 環境設定 > 一般 からどうぞ。 <form name="form"> <button name="OK" text="環境設定の変更"/> <button default="true" name="Cancel" text="閉じる"/> @@ -2230,7 +2280,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ ここでは飛べません。 </notification> <notification name="PushRestricted"> - このエリアではプッシュが制限されています。 土地所有者以外は他人をプッシュすることはできません。 + このエリアではプッシュが禁止されています。 土地所有者以外は他人をプッシュすることはできません。 </notification> <notification name="NoVoice"> このエリアではボイスチャットが無効です。 誰かが話しているのを聞くことはできません。 @@ -2339,15 +2389,6 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ <button name="Mute" text="ブロック"/> </form> </notification> - <notification name="ObjectGiveItemUnknownUser"> - (不明の住人)が所有する [OBJECTFROMNAME] という名前のオブジェクトが、あなたに [OBJECTTYPE] を渡しました: -[ITEM_SLURL] - <form name="form"> - <button name="Keep" text="受け取る"/> - <button name="Discard" text="破棄"/> - <button name="Mute" text="ブロック"/> - </form> - </notification> <notification name="UserGiveItem"> [NAME_SLURL] があなたに [OBJECTTYPE] を渡しました: [ITEM_SLURL] @@ -2661,8 +2702,52 @@ M キーを押して変更します。 <notification name="ShareNotification"> 住人選択画面に表示された人に「持ち物」からアイテムをドラッグしてください </notification> + <notification name="DeedToGroupFail"> + グループへの譲渡に失敗しました。 + </notification> <notification name="AvatarRezNotification"> - アバター「 [NAME] 」が [TIME] 秒で出現します。 + ( [EXISTENCE] 秒) +アバター「 [NAME] 」が [TIME] 秒で出現します。 + </notification> + <notification name="AvatarRezSelfNotification"> + ( [EXISTENCE] 秒) +[TIME] 秒でアウトフィットのベーキングが完了しました。 + </notification> + <notification name="AvatarRezCloudNotification"> + ( [EXISTENCE] 秒) +アバター「 NAME 」がクラウドになりました。 + </notification> + <notification name="AvatarRezArrivedNotification"> + ( [EXISTENCE] 秒) +アバター「 NAME 」が現れました。 + </notification> + <notification name="AvatarRezLeftCloudNotification"> + ( [EXISTENCE] 秒) +アバター「 [NAME] 」が [TIME] 秒でクラウド状態から出現します。 + </notification> + <notification name="AvatarRezEnteredAppearanceNotification"> + ( [EXISTENCE] 秒) +アバター「 NAME 」が容姿編集モードに入りました。 + </notification> + <notification name="AvatarRezLeftAppearanceNotification"> + ( [EXISTENCE] 秒) +アバター「 NAME 」が容姿編集モードを解除しました。 + </notification> + <notification name="AvatarRezLeftNotification"> + ( [EXISTENCE] 秒) +アバター「 NAME 」が完全に読み込まれました。 + </notification> + <notification name="ConfirmLeaveCall"> + このコールから抜けますか? + <usetemplate ignoretext="コールから抜ける前の確認" name="okcancelignore" notext="いいえ" yestext="はい"/> + </notification> + <notification name="ConfirmMuteAll"> + グループコールの参加者全員をミュートしました。 +あとからこのコールに参加する住人も +ミュートされます。あなたがコールを終了しても他の参加者のミュート状態が続きます。 + +全員をミュートしますか? + <usetemplate ignoretext="グループコールの参加者全員をミュートする前の確認" name="okcancelignore" notext="Ok" yestext="キャンセル"/> </notification> <global name="UnsupportedCPU"> - あなたの CPU の速度は必須動作環境の条件を満たしていません。 diff --git a/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml new file mode 100644 index 0000000000..de764d8025 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml new file mode 100644 index 0000000000..517fdeb25e --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="clothing_list_button_bar_panel"> + <button label="入れ替える" name="switch_btn"/> + <button label="ショッピング >" name="bodyparts_shop_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml index f12f07f3e9..04b4893026 100644 --- a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml @@ -1,11 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="bottom_tray"> - <string name="SpeakBtnToolTip"> - マイクのオン・オフ - </string> - <string name="VoiceControlBtnToolTip"> - ボイスコントロールパネルの表示・非表示 - </string> + <string name="SpeakBtnToolTip" value="マイクのオン・オフ"/> + <string name="VoiceControlBtnToolTip" value="ボイスコントロールパネルの表示・非表示"/> <layout_stack name="toolbar_stack"> <layout_panel name="speak_panel"> <talk_button name="talk"> @@ -24,6 +20,21 @@ <layout_panel name="snapshot_panel"> <button label="" name="snapshots" tool_tip="スナップショットを撮ります"/> </layout_panel> + <layout_panel name="sidebar_btn_panel"> + <button label="サイドバー" name="sidebar_btn" tool_tip="サイドバーの表示・非表示"/> + </layout_panel> + <layout_panel name="build_btn_panel"> + <button label="制作" name="build_btn" tool_tip="制作ツールの表示・非表示"/> + </layout_panel> + <layout_panel name="search_btn_panel"> + <button label="検索" name="search_btn" tool_tip="検索の表示・非表示"/> + </layout_panel> + <layout_panel name="world_map_btn_panel"> + <button label="地図" name="world_map_btn" tool_tip="世界地図の表示・非表示"/> + </layout_panel> + <layout_panel name="mini_map_btn_panel"> + <button label="ミニマップ" name="mini_map_btn" tool_tip="ミニマップの表示・非表示"/> + </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> <button name="Unread IM messages" tool_tip="会話"/> diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml new file mode 100644 index 0000000000..834884fa4a --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="clothing_list_button_bar_panel"> + <button label="追加 +" name="add_btn"/> + <button label="ショッピング >" name="clothing_shop_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml new file mode 100644 index 0000000000..de764d8025 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml b/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml new file mode 100644 index 0000000000..b9bc10c220 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="cof_wearables"> + <accordion name="cof_wearables_accordion"> + <accordion_tab name="tab_attachments" title="アタッチメント"/> + <accordion_tab name="tab_clothing" title="衣類"/> + <accordion_tab name="tab_body_parts" title="身体部位"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml new file mode 100644 index 0000000000..91d90a5660 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="deletable_wearable_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml new file mode 100644 index 0000000000..6af84de0c7 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="dummy_clothing_item"> + <text name="item_name" value="..."/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml index e60534a54e..5aed830d80 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml @@ -1,14 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shape_panel"> - <panel name="avatar_sex_panel"> - <text name="gender_text"> - 性別: - </text> - <radio_group name="sex_radio"> - <radio_item label="女性" name="radio"/> - <radio_item label="男性" name="radio2"/> - </radio_group> - </panel> + <text name="avatar_height"> + 高さ [HEIGHT] メートル + </text> <panel label="シャツ" name="accordion_panel"> <accordion name="wearable_accordion"> <accordion_tab name="shape_body_tab" title="身体"/> @@ -18,7 +12,7 @@ <accordion_tab name="shape_nose_tab" title="鼻"/> <accordion_tab name="shape_mouth_tab" title="口"/> <accordion_tab name="shape_chin_tab" title="あご"/> - <accordion_tab name="shape_torso_tab" title="頭"/> + <accordion_tab name="shape_torso_tab" title="上半身"/> <accordion_tab name="shape_legs_tab" title="脚"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml index 78ddae47f9..c3f8c12620 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml @@ -4,5 +4,6 @@ <texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択" width="70"/> <texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択" width="70"/> <texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択" width="70"/> + <color_swatch label="色・色彩配合" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml index 67828af6c2..5e3342699b 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml @@ -93,6 +93,12 @@ <text name="edit_wearable_title" value="シェイプを編集中"/> <panel label="シャツ" name="wearable_type_panel"> <text name="description_text" value="シェイプ:"/> + <radio_group name="sex_radio"> + <radio_item label="" name="sex_male" tool_tip="男性" value="1"/> + <radio_item label="" name="sex_female" tool_tip="女性" value="0"/> + </radio_group> + <icon name="male_icon" tool_tip="男性"/> + <icon name="female_icon" tool_tip="女性"/> </panel> <panel label="gear_buttom_panel" name="gear_buttom_panel"> <button name="friends_viewsort_btn" tool_tip="オプション"/> diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml index ef6d8cce47..4b3a7f880b 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml @@ -6,6 +6,9 @@ <panel.string name="cant_view_group_land_text"> グループ所有地を確認する権限がありません。 </panel.string> + <panel.string name="epmty_view_group_land_text"> + なし + </panel.string> <panel.string name="cant_view_group_accounting_text"> グループの会計情報を確認する権限がありません。 </panel.string> diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml index a0c50c6122..0b508bd79d 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml @@ -15,7 +15,7 @@ <scroll_list name="notice_list"> <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="件名" name="subject"/> - <scroll_list.columns label="送り主" name="from"/> + <scroll_list.columns label="送信者" name="from"/> <scroll_list.columns label="日付" name="date"/> </scroll_list> <text name="notice_list_none_found"> @@ -25,7 +25,7 @@ <button label="更新" label_selected="リスト更新" name="refresh_notices" tool_tip="通知リストを更新します"/> <panel label="新しい通知を作成" name="panel_create_new_notice"> <text name="lbl"> - 通知を作成 + 通知の作成 </text> <text name="lbl3"> 件名: @@ -39,6 +39,7 @@ <text name="string"> ここにアイテムをドラッグ&ドロップして添付してください: </text> + <button label="持ち物" name="open_inventory" tool_tip="持ち物を開きます"/> <button label="取り外す" label_selected="添付物を削除" name="remove_attachment" tool_tip="あなたの通知から添付されたアイテムを削除します"/> <button label="送信" label_selected="送信" name="send_notice"/> <group_drop_target name="drop_target" tool_tip="持ち物のアイテムをこのボックスにドラッグして、通知と一緒に送ります。 添付するには、そのアイテムのコピーと再販・プレゼントの権限があなたにある必要があります。"/> diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index c217af38ba..f0ebc67ef5 100644 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -8,18 +8,15 @@ </panel.string> <layout_stack name="login_widgets"> <layout_panel name="login"> - <text name="first_name_text"> - ファーストネーム: + <text name="username_text"> + ユーザー名: </text> - <line_editor label="最初" name="first_name_edit" tool_tip="[SECOND_LIFE] ファーストネーム"/> - <text name="last_name_text"> - ラストネーム: - </text> - <line_editor label="最後" name="last_name_edit" tool_tip="[SECOND_LIFE] ラストネーム"/> + <line_editor label="ユーザー名" name="username_edit" tool_tip="[SECOND_LIFE] ユーザー名"/> <text name="password_text"> パスワード: </text> <check_box label="パスワードを記憶" name="remember_check"/> + <button label="ログイン" left_pad="30" name="connect_btn" width="60"/> <text name="start_location_text"> 開始地点: </text> @@ -28,7 +25,6 @@ <combo_box.item label="ホーム" name="MyHome"/> <combo_box.item label="<地域名を入力>" name="Typeregionname"/> </combo_box> - <button label="ログイン" left_pad="30" name="connect_btn" width="60"/> </layout_panel> <layout_panel name="links"> <text name="create_new_account_text"> diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml index 9981d13bbb..ff968696b7 100644 --- a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml @@ -9,62 +9,20 @@ <text name="ItemcountText"> アイテム: </text> - <menu_bar name="Inventory Menu"> - <menu label="ファイル" name="File"> - <menu_item_call label="開く" name="Open"/> - <menu label="アップロード" name="upload"> - <menu_item_call label="画像 (L$ [COST] )..." name="Upload Image"/> - <menu_item_call label="サウンド (L$[COST] )..." name="Upload Sound"/> - <menu_item_call label="アニメーション (L$ [COST] )..." name="Upload Animation"/> - <menu_item_call label="一括 (ファイルにつき L$[COST] )..." name="Bulk Upload"/> - </menu> - <menu_item_call label="新しいウィンドウ" name="New Window"/> - <menu_item_call label="フィルターを表示" name="Show Filters"/> - <menu_item_call label="フィルターをリセット" name="Reset Current"/> - <menu_item_call label="すべてのフォルダを閉じる" name="Close All Folders"/> - <menu_item_call label="ごみ箱を空にする" name="Empty Trash"/> - <menu_item_call label="紛失物を空にする" name="Empty Lost And Found"/> - </menu> - <menu label="新規作成" name="Create"> - <menu_item_call label="フォルダ" name="New Folder"/> - <menu_item_call label="スクリプト" name="New Script"/> - <menu_item_call label="ノートカード" name="New Note"/> - <menu_item_call label="ジェスチャー" name="New Gesture"/> - <menu label="衣類" name="New Clothes"> - <menu_item_call label="シャツ" name="New Shirt"/> - <menu_item_call label="パンツ" name="New Pants"/> - <menu_item_call label="靴" name="New Shoes"/> - <menu_item_call label="靴下" name="New Socks"/> - <menu_item_call label="ジャケット" name="New Jacket"/> - <menu_item_call label="スカート" name="New Skirt"/> - <menu_item_call label="手袋" name="New Gloves"/> - <menu_item_call label="下着(上)" name="New Undershirt"/> - <menu_item_call label="下着(下)" name="New Underpants"/> - <menu_item_call label="アルファ" name="New Alpha"/> - <menu_item_call label="タトゥ" name="New Tattoo"/> - </menu> - <menu label="身体部位" name="New Body Parts"> - <menu_item_call label="シェイプ(体型)" name="New Shape"/> - <menu_item_call label="スキン" name="New Skin"/> - <menu_item_call label="髪" name="New Hair"/> - <menu_item_call label="目" name="New Eyes"/> - </menu> - </menu> - <menu label="並べ替え" name="Sort"> - <menu_item_check label="名前順" name="By Name"/> - <menu_item_check label="日付順" name="By Date"/> - <menu_item_check label="フォルダを常に名前順に並べる" name="Folders Always By Name"/> - <menu_item_check label="システムフォルダを上に並べる" name="System Folders To Top"/> - </menu> - </menu_bar> <filter_editor label="持ち物をフィルター" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="持ち物" name="All Items"/> - <inventory_panel label="最新" name="Recent Items"/> + <recent_inventory_panel label="最新" name="Recent Items"/> </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="その他のオプションを表示します"/> - <button name="add_btn" tool_tip="新しいアイテムを追加します"/> - <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/> - </panel> + <layout_stack name="bottom_panel"> + <layout_panel name="options_gear_btn_panel"> + <button name="options_gear_btn" tool_tip="オプションを表示します"/> + </layout_panel> + <layout_panel name="add_btn_panel"> + <button name="add_btn" tool_tip="新しいアイテムを追加します"/> + </layout_panel> + <layout_panel name="trash_btn_panel"> + <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml index d0089b46aa..cf6e6eaae3 100644 --- a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml @@ -2,6 +2,8 @@ <!-- Side tray Outfit Edit panel --> <panel label="アウトフットの編集" name="outfit_edit"> <string name="No Outfit" value="アウトフィットなし"/> + <string name="unsaved_changes" value="保存されていない変更"/> + <string name="now_editing" value="編集しています..."/> <panel.string name="not_available"> (該当なし) </panel.string> @@ -15,24 +17,19 @@ <text name="title" value="アウトフットの編集"/> <panel label="bottom_panel" name="header_panel"> <panel label="bottom_panel" name="outfit_name_and_status"> - <text name="status" value="編集中..."/> + <text name="status" value="編集しています..."/> <text name="curr_outfit_name" value="[Current Outfit]"/> </panel> </panel> <layout_stack name="im_panels"> <layout_panel label="IM コントロールパネル" name="outfit_wearables_panel"> - <scroll_list name="look_items_list"> - <scroll_list.columns label="アイテムを確認" name="look_item"/> - <scroll_list.columns label="アウトフィットアイテムの並べ替え" name="look_item_sort"/> - </scroll_list> <panel label="bottom_panel" name="edit_panel"/> </layout_panel> <layout_panel name="add_wearables_panel"> - <filter_editor label="フィルター" name="look_item_filter"/> + <text name="add_to_outfit_label" value="アウトフィットに追加:"/> <layout_stack name="filter_panels"> - <layout_panel label="IM コントロールパネル" name="filter_button_panel"> - <text name="add_to_outfit_label" value="アウトフィットに追加:"/> - <button label="O" name="filter_button"/> + <layout_panel label="IM コントロールパネル" name="filter_panel"> + <filter_editor label="フィルター" name="look_item_filter"/> </layout_panel> </layout_stack> <panel label="add_wearables_button_bar" name="add_wearables_button_bar"> diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml index 5af578b640..68af19910a 100644 --- a/indra/newview/skins/default/xui/ja/panel_people.xml +++ b/indra/newview/skins/default/xui/ja/panel_people.xml @@ -2,9 +2,9 @@ <!-- Side tray panel --> <panel label="人" name="people_panel"> <string name="no_recent_people" value="最近交流した人はいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/> - <string name="no_filtered_recent_people" value="お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。"/> + <string name="no_filtered_recent_people" value="お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。"/> <string name="no_one_near" value="近くに誰もいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/> - <string name="no_one_filtered_near" value="お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。"/> + <string name="no_one_filtered_near" value="お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。"/> <string name="no_friends_online" value="オンラインのフレンドはいません"/> <string name="no_friends" value="フレンドはいません"/> <string name="no_friends_msg"> @@ -12,11 +12,11 @@ 一緒に何かする仲間をお探しですか? [secondlife:///app/worldmap 世界地図] をお試しください。 </string> <string name="no_filtered_friends_msg"> - お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。 + お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。 </string> <string name="people_filter_label" value="人をフィルター"/> <string name="groups_filter_label" value="グループをフィルター"/> - <string name="no_filtered_groups_msg" value="お探しのものは見つかりましたか? [secondlife:///app/search/groups 検索] をお試しください。"/> + <string name="no_filtered_groups_msg" value="お探しのものは見つかりましたか? [secondlife:///app/search/groups/[SEARCH_TERM] 検索] をお試しください。"/> <string name="no_groups_msg" value="グループをお探しですか? [secondlife:///app/search/groups 検索] をお試しください。"/> <filter_editor label="フィルター" name="filter_input"/> <tab_container name="tabs"> @@ -55,7 +55,7 @@ <button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示します"/> <button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/> <button label="コール" name="call_btn" tool_tip="この住人にコールします"/> - <button label="共有" name="share_btn"/> + <button label="共有" name="share_btn" tool_tip="持ち物アイテムを共有"/> <button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/> <button label="グループ情報" name="group_info_btn" tool_tip="グループ情報を表示します"/> <button label="グループチャット" name="chat_btn" tool_tip="チャットを開始します"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml index 753951e282..94ee5c6ff4 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml @@ -13,6 +13,7 @@ </text> <check_box label="制作・編集" name="edit_camera_movement" tool_tip="編集モードのオン・オフの切り替えに、自動カメラポジションを使います"/> <check_box label="容姿" name="appearance_camera_movement" tool_tip="編集モードに入ったときに、自動カメラポジションを使います"/> + <check_box initial_value="1" label="サイドバー" name="appearance_sidebar_positioning" tool_tip="サイドバーの切り替え時に自動カメラポジションを使います"/> <check_box label="一人称視点で表示する" name="first_person_avatar_visible"/> <check_box label="常にキー操作で動くようにする" name="arrow_keys_move_avatar_check"/> <check_box label="上矢印キー2度押し+長押しで走る" name="tap_tap_hold_to_run"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index e5780697b1..86f880de09 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -45,7 +45,7 @@ </text> <check_box initial_value="true" label="チャット中にタイピング動作のアニメーションを再生" name="play_typing_animation"/> <check_box label="オフライン時に受け取った IM をメールで受信" name="send_im_to_email"/> - <check_box label="チャット履歴に文字だけ表示する" name="plain_text_chat_history"/> + <check_box label="IM とチャット履歴に文字だけ表示する" name="plain_text_chat_history"/> <text name="show_ims_in_label"> IM の表示方法: </text> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index 8df829c296..75de773366 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -1,19 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="表示" name="Display panel"> - <text name="WindowSizeLabel"> - ウィンドウ・サイズ: - </text> - <check_box label="全画面" name="windowed mode"/> - <combo_box name="windowsize combo"> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="720x480 (NTSC)" name="720x480"/> - <combo_box.item label="768x576 (PAL)" name="768x576"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <text name="UI Size:"> - UI サイズ: - </text> <text name="QualitySpeed"> クオリティとスピード: </text> @@ -63,6 +49,10 @@ m </text> <slider label="最大パーティクル数:" name="MaxParticleCount"/> + <slider label="アバター最大描画距離:" name="MaxAvatarDrawDistance"/> + <text name="DrawDistanceMeterText3"> + m + </text> <slider label="ポストプロセス品質:" name="RenderPostProcess"/> <text name="MeshDetailText"> メッシュ詳細: @@ -98,8 +88,8 @@ ライティング詳細: </text> <radio_group name="LightingDetailRadio"> - <radio_item label="太陽と月のみ" name="SunMoon"/> - <radio_item label="近くのローカルサイト" name="LocalLights"/> + <radio_item label="太陽と月のみ" name="SunMoon" value="0"/> + <radio_item label="近くのローカルサイト" name="LocalLights" value="1"/> </radio_group> <text name="TerrainDetailText"> 地形詳細: diff --git a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml index 94be8ba73d..c453699c57 100644 --- a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml @@ -1,16 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="アウトフィット" name="appearance panel"> <string name="No Outfit" value="アウトフィットなし"/> + <string name="Unsaved Changes" value="保存されていない変更"/> + <string name="Now Wearing" value="着用しています..."/> <panel name="panel_currentlook"> - <button label="編集" name="editappearance_btn"/> - <text name="currentlook_title"> - (保存されていません) + <button label="E" name="editappearance_btn"/> + <button label="O" name="openoutfit_btn"/> + <text name="currentlook_status"> + (状態) </text> <text name="currentlook_name"> MyOutfit With a really Long Name like MOOSE </text> </panel> <filter_editor label="アウトフィットをフィルター" name="Filter"/> - <button label="装着" name="wear_btn"/> - <button label="新しいアウトフィット" name="newlook_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml index f82c6136a6..a0f44d9de9 100644 --- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml @@ -4,6 +4,7 @@ <panel name="button_panel"> <button label="プロフィール" name="info_btn"/> <button label="共有" name="share_btn"/> + <button label="ショッピング" name="shop_btn"/> <button label="装着" name="wear_btn"/> <button label="プレイ" name="play_btn"/> <button label="テレポート" name="teleport_btn"/> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 261c49931e..c0bb14afba 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -100,6 +100,24 @@ <string name="LoginDownloadingClothing"> 衣類をダウンロードしています... </string> + <string name="InvalidCertificate"> + 証明書が無効または壊れています。 グリッド管理者にご連絡ください。 + </string> + <string name="CertInvalidHostname"> + 無効なホストネームがサーバーにアクセスしていました。SLURL かグリッドのホストネームをご確認ください。 + </string> + <string name="CertExpired"> + 証明書の有効期限が切れています。 システムの時計を確認するかグリッド管理者にご連絡ください。 + </string> + <string name="CertKeyUsage"> + SSL 証明書のエラーが発生しました。 グリッド管理者にご連絡ください。 + </string> + <string name="CertBasicConstraints"> + サーバーの証明書チェーンに証明書が多すぎます。 グリッド管理者にご連絡ください。 + </string> + <string name="CertInvalidSignature"> + 証明書署名を認証できませんでした。 グリッド管理者にご連絡ください。 + </string> <string name="LoginFailedNoNetwork"> ネットワークエラー: 接続を確立できませんでした。お使いのネットワーク接続をご確認ください。 </string> @@ -840,6 +858,42 @@ <string name="invalid"> 無効 </string> + <string name="shirt_not_worn"> + シャツ未着用 + </string> + <string name="pants_not_worn"> + パンツ未着用 + </string> + <string name="shoes_not_worn"> + 靴未着用 + </string> + <string name="socks_not_worn"> + 靴下未着用 + </string> + <string name="jacket_not_worn"> + ジャケット未着用 + </string> + <string name="gloves_not_worn"> + 手袋未着用 + </string> + <string name="undershirt_not_worn"> + 下着(上)未着用 + </string> + <string name="underpants_not_worn"> + 下着(下)未着用 + </string> + <string name="skirt_not_worn"> + スカート未着用 + </string> + <string name="alpha_not_worn"> + アルファ未着用 + </string> + <string name="tattoo_not_worn"> + タトゥー未着用 + </string> + <string name="invalid_not_worn"> + 無効 + </string> <string name="NewWearable"> 新しい [WEARABLE_ITEM] </string> @@ -892,7 +946,7 @@ 左脚 </string> <string name="BodyPartsTorso"> - 頭 + 上半身 </string> <string name="BodyPartsRightLeg"> 右脚 @@ -910,7 +964,10 @@ ESC キーを押してワールドビューに戻ります </string> <string name="InventoryNoMatchingItems"> - お探しのものは見つかりましたか? [secondlife:///app/search/all 検索] をお試しください。 + お探しのものは見つかりましたか? [secondlife:///app/search/all/[SEARCH_TERM] 検索] をお試しください。 + </string> + <string name="PlacesNoMatchingItems"> + お探しのものは見つかりましたか? [secondlife:///app/search/places/[SEARCH_TERM] 検索] をお試しください。 </string> <string name="FavoritesNoMatchingItems"> ここにランドマークをドラッグしてお気に入りに追加します。 @@ -946,6 +1003,7 @@ <string name="Wave" value=" 手を振る"/> <string name="HelloAvatar" value=" やあ、アバター!"/> <string name="ViewAllGestures" value=" すべて表示 >>"/> + <string name="GetMoreGestures" value="ショッピング >>"/> <string name="Animations" value="アニメーション、"/> <string name="Calling Cards" value="コーリングカード、"/> <string name="Clothing" value="衣類、"/> @@ -1575,6 +1633,9 @@ <string name="MuteGroup"> (グループ) </string> + <string name="MuteExternal"> + (外部) + </string> <string name="RegionNoCovenant"> この不動産には約款がありません。 </string> @@ -2416,7 +2477,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 頭の大きさ </string> <string name="Head Stretch"> - 頭の伸び + 縦横の長さ </string> <string name="Heel Height"> ヒールの高さ @@ -3244,7 +3305,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ ほおの上部 </string> <string name="Upper Chin Cleft"> - あご上部の割れ具合 + あご上部の割れ </string> <string name="Upper Eyelid Fold"> 二重の幅 @@ -3390,12 +3451,15 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="answered_call"> 相手がコールを受けました </string> - <string name="started_call"> + <string name="you_started_call"> ボイスコールを開始します </string> - <string name="joined_call"> + <string name="you_joined_call"> ボイスコールに参加しました </string> + <string name="name_started_call"> + [NAME] はボイスコールを開始します + </string> <string name="ringing-im"> ボイスコールに参加... </string> @@ -3605,6 +3669,90 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Contents"> コンテンツ </string> + <string name="Gesture"> + ジェスチャー + </string> + <string name="Male Gestures"> + 男性用ジェスチャー + </string> + <string name="Female Gestures"> + 女性用ジェスチャー + </string> + <string name="Other Gestures"> + その他のジェスチャー + </string> + <string name="Speech Gestures"> + 会話ジェスチャー + </string> + <string name="Common Gestures"> + 一般的ジェスチャー + </string> + <string name="Male - Excuse me"> + 男性 - すみません + </string> + <string name="Male - Get lost"> + 男性 - Get lost + </string> + <string name="Male - Blow kiss"> + 男性 - 投げキッス + </string> + <string name="Male - Boo"> + 男性 - Boo + </string> + <string name="Male - Bored"> + 男性 - 退屈 + </string> + <string name="Male - Hey"> + 男性 - Hey + </string> + <string name="Male - Laugh"> + 男性 - 笑う + </string> + <string name="Male - Repulsed"> + 男性 - 拒絶 + </string> + <string name="Male - Shrug"> + 男性 - 肩をすくめる + </string> + <string name="Male - Stick tougue out"> + 男性 - 舌を出す + </string> + <string name="Male - Wow"> + 男性 - Wow + </string> + <string name="FeMale - Excuse me"> + 女性 - すみません + </string> + <string name="FeMale - Get lost"> + 女性 - Get lost + </string> + <string name="FeMale - Blow kiss"> + 女性 - 投げキッス + </string> + <string name="FeMale - Boo"> + 女性 - Boo + </string> + <string name="Female - Bored"> + 女性 - 退屈 + </string> + <string name="Female - Hey"> + 女性 - Hey + </string> + <string name="Female - Laugh"> + 女性 - 笑う + </string> + <string name="Female - Repulsed"> + 女性 - 拒絶 + </string> + <string name="Female - Shrug"> + 女性 - 肩をすくめる + </string> + <string name="Female - Stick tougue out"> + 女性 - 舌を出す + </string> + <string name="Female - Wow"> + 女性 - Wow + </string> <string name="AvatarBirthDateFormat"> [year,datetime,slt]/[mthnum,datetime,slt]/[day,datetime,slt] </string> diff --git a/install.xml b/install.xml index bb2f8c1f2f..1265963fb1 100644 --- a/install.xml +++ b/install.xml @@ -118,9 +118,9 @@ <key>linux</key> <map> <key>md5sum</key> - <string>946c2e106f14f7a1e521d4a14e0e146f</string> + <string>91694429e391efeea1de974df26032a2</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.4.0-linux-20081202.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-linux-20100527.tar.bz2</uri> </map> <key>linux64</key> <map> @@ -240,9 +240,9 @@ <key>linux</key> <map> <key>md5sum</key> - <string>0f366e421ae9c72d9659bd20a2a326d6</string> + <string>a20e73f2e7d6a032ff25a5161b1b7394</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.4a-linux-20090303a.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.20.1-linux-20100527.tar.bz2</uri> </map> <key>linux64</key> <map> @@ -962,9 +962,9 @@ anguage Infrstructure (CLI) international standard</string> <key>windows</key> <map> <key>md5sum</key> - <string>d682ed6232193b4eab3170657a54ebf9</string> + <string>1d9697fed57084eea7b3dc250e9c66f7</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-windows-qt4.6-20100519.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-windows-qt4.6-20100525.tar.bz2</uri> </map> </map> </map> |