00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "llfloateravatartextures.h"
00035
00036 #include "lltexturectrl.h"
00037
00038 #include "lluictrlfactory.h"
00039 #include "llviewerobjectlist.h"
00040 #include "llvoavatar.h"
00041
00042 LLFloaterAvatarTextures::LLFloaterAvatarTextures(const LLUUID& id) :
00043 LLFloater("avatar_texture_debug"),
00044 mID(id)
00045 {
00046 }
00047
00048 LLFloaterAvatarTextures::~LLFloaterAvatarTextures()
00049 {
00050 }
00051
00052 LLFloaterAvatarTextures* LLFloaterAvatarTextures::show(const LLUUID &id)
00053 {
00054
00055 LLFloaterAvatarTextures* floaterp = new LLFloaterAvatarTextures(id);
00056
00057
00058 LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_avatar_textures.xml");
00059
00060 gFloaterView->addChild(floaterp);
00061 floaterp->open();
00062
00063 gFloaterView->adjustToFitScreen(floaterp, FALSE);
00064
00065 return floaterp;
00066 }
00067
00068 BOOL LLFloaterAvatarTextures::postBuild()
00069 {
00070 mBakedHead = getChild<LLTextureCtrl>("baked_head");
00071 mBakedEyes = getChild<LLTextureCtrl>("baked_eyes");
00072 mBakedUpper = getChild<LLTextureCtrl>("baked_upper_body");
00073 mBakedLower = getChild<LLTextureCtrl>("baked_lower_body");
00074 mBakedSkirt = getChild<LLTextureCtrl>("baked_skirt");
00075 mHair = getChild<LLTextureCtrl>("hair");
00076 mMakeup = getChild<LLTextureCtrl>("head_bodypaint");
00077 mEye = getChild<LLTextureCtrl>("eye_texture");
00078 mShirt = getChild<LLTextureCtrl>("shirt");
00079 mUpperTattoo = getChild<LLTextureCtrl>("upper_bodypaint");
00080 mUpperJacket = getChild<LLTextureCtrl>("upper_jacket");
00081 mGloves = getChild<LLTextureCtrl>("gloves");
00082 mUndershirt = getChild<LLTextureCtrl>("undershirt");
00083 mPants = getChild<LLTextureCtrl>("pants");
00084 mLowerTattoo = getChild<LLTextureCtrl>("lower_bodypaint");
00085 mShoes = getChild<LLTextureCtrl>("shoes");
00086 mSocks = getChild<LLTextureCtrl>("socks");
00087 mJacket = getChild<LLTextureCtrl>("jacket");
00088 mUnderpants = getChild<LLTextureCtrl>("underpants");
00089 mSkirt = getChild<LLTextureCtrl>("skirt_texture");
00090 mTitle = getTitle();
00091
00092 childSetAction("Dump", onClickDump, this);
00093
00094 refresh();
00095 return TRUE;
00096 }
00097
00098 void LLFloaterAvatarTextures::draw()
00099 {
00100 refresh();
00101 LLFloater::draw();
00102 }
00103
00104 #if !LL_RELEASE_FOR_DOWNLOAD
00105 static void update_texture_ctrl(LLVOAvatar* avatarp,
00106 LLTextureCtrl* ctrl,
00107 LLVOAvatar::ETextureIndex te)
00108 {
00109 LLUUID id = avatarp->getTE(te)->getID();
00110 if (id == IMG_DEFAULT_AVATAR)
00111 {
00112 ctrl->setImageAssetID(LLUUID::null);
00113 ctrl->setToolTip(LLString("IMG_DEFAULT_AVATAR"));
00114 }
00115 else
00116 {
00117 ctrl->setImageAssetID(id);
00118 ctrl->setToolTip(id.asString());
00119 }
00120 }
00121
00122 static LLVOAvatar* find_avatar(const LLUUID& id)
00123 {
00124 LLViewerObject *obj = gObjectList.findObject(id);
00125 while (obj && obj->isAttachment())
00126 {
00127 obj = (LLViewerObject *)obj->getParent();
00128 }
00129
00130 if (obj && obj->isAvatar())
00131 {
00132 return (LLVOAvatar*)obj;
00133 }
00134 else
00135 {
00136 return NULL;
00137 }
00138 }
00139
00140 void LLFloaterAvatarTextures::refresh()
00141 {
00142 LLVOAvatar *avatarp = find_avatar(mID);
00143 if (avatarp)
00144 {
00145 std::string fullname;
00146 if (gCacheName->getFullName(avatarp->getID(), fullname))
00147 {
00148 setTitle(mTitle + ": " + fullname);
00149 }
00150 update_texture_ctrl(avatarp, mBakedHead, LLVOAvatar::TEX_HEAD_BAKED);
00151 update_texture_ctrl(avatarp, mBakedEyes, LLVOAvatar::TEX_EYES_BAKED);
00152 update_texture_ctrl(avatarp, mBakedUpper, LLVOAvatar::TEX_UPPER_BAKED);
00153 update_texture_ctrl(avatarp, mBakedLower, LLVOAvatar::TEX_LOWER_BAKED);
00154 update_texture_ctrl(avatarp, mBakedSkirt, LLVOAvatar::TEX_SKIRT_BAKED);
00155
00156 update_texture_ctrl(avatarp, mMakeup, LLVOAvatar::TEX_HEAD_BODYPAINT);
00157 update_texture_ctrl(avatarp, mHair, LLVOAvatar::TEX_HAIR);
00158 update_texture_ctrl(avatarp, mEye, LLVOAvatar::TEX_EYES_IRIS);
00159
00160 update_texture_ctrl(avatarp, mShirt, LLVOAvatar::TEX_UPPER_SHIRT);
00161 update_texture_ctrl(avatarp, mUpperTattoo, LLVOAvatar::TEX_UPPER_BODYPAINT);
00162 update_texture_ctrl(avatarp, mUpperJacket, LLVOAvatar::TEX_UPPER_JACKET);
00163 update_texture_ctrl(avatarp, mGloves, LLVOAvatar::TEX_UPPER_GLOVES);
00164 update_texture_ctrl(avatarp, mUndershirt, LLVOAvatar::TEX_UPPER_UNDERSHIRT);
00165
00166 update_texture_ctrl(avatarp, mPants, LLVOAvatar::TEX_LOWER_PANTS);
00167 update_texture_ctrl(avatarp, mLowerTattoo, LLVOAvatar::TEX_LOWER_BODYPAINT);
00168 update_texture_ctrl(avatarp, mShoes, LLVOAvatar::TEX_LOWER_SHOES);
00169 update_texture_ctrl(avatarp, mSocks, LLVOAvatar::TEX_LOWER_SOCKS);
00170 update_texture_ctrl(avatarp, mJacket, LLVOAvatar::TEX_LOWER_JACKET);
00171 update_texture_ctrl(avatarp, mUnderpants, LLVOAvatar::TEX_LOWER_UNDERPANTS);
00172 update_texture_ctrl(avatarp, mSkirt, LLVOAvatar::TEX_SKIRT);
00173 }
00174 else
00175 {
00176 setTitle(mTitle + ": INVALID AVATAR (" + mID.asString() + ")");
00177 }
00178 }
00179
00180 #else
00181
00182 void LLFloaterAvatarTextures::refresh()
00183 {
00184 }
00185
00186 #endif
00187
00188
00189 void LLFloaterAvatarTextures::onClickDump(void* data)
00190 {
00191 #if !LL_RELEASE_FOR_DOWNLOAD
00192 LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data;
00193 LLVOAvatar* avatarp = find_avatar(self->mID);
00194 if (!avatarp) return;
00195
00196 for (S32 i = 0; i < avatarp->getNumTEs(); i++)
00197 {
00198 const LLTextureEntry* te = avatarp->getTE(i);
00199 if (!te) continue;
00200
00201 llinfos << "Avatar TE " << i << " id " << te->getID() << llendl;
00202 }
00203 #endif
00204 }