diff options
author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-05-27 12:28:32 +0100 |
---|---|---|
committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-05-27 12:28:32 +0100 |
commit | e5273960de222ffae32405fde8e9fd566ff72d0a (patch) | |
tree | e4dbc9e0669f49f3e222ee9b3e8856700e300c98 /indra/newview | |
parent | 63200e2a5bfc7538fd8114464000f35798670f23 (diff) | |
parent | 423398081b5c4402ebc162c43eaf29acdeb9f423 (diff) |
merge from PE's viewer-trunk
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llagentwearablesfetch.cpp | 12 | ||||
-rw-r--r-- | indra/newview/llpaneleditwearable.cpp | 106 | ||||
-rw-r--r-- | indra/newview/llpaneleditwearable.h | 15 | ||||
-rw-r--r-- | indra/newview/llpanelgrouproles.cpp | 13 | ||||
-rw-r--r-- | indra/newview/llpanelgrouproles.h | 3 | ||||
-rw-r--r-- | indra/newview/llsidepanelappearance.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llstartup.cpp | 21 | ||||
-rw-r--r-- | indra/newview/llstartup.h | 4 | ||||
-rw-r--r-- | indra/newview/llvoavatar.cpp | 23 | ||||
-rw-r--r-- | indra/newview/llvoavatar.h | 14 | ||||
-rw-r--r-- | indra/newview/llvoavatarself.cpp | 26 | ||||
-rw-r--r-- | indra/newview/llvoavatarself.h | 3 | ||||
-rw-r--r-- | indra/newview/llworldview.cpp | 6 | ||||
-rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 2 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_outfit_edit.xml | 36 |
15 files changed, 247 insertions, 39 deletions
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/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 8e9b164c09..b5b21584aa 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -645,6 +645,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; } @@ -667,11 +673,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(); @@ -970,6 +975,13 @@ void LLPanelEditWearable::initializePanel() for_each_picker_ctrl_entry <LLTextureCtrl> (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2)); updateVerbs(); + + if (getWearable()) + { + LLWearableType::EType type = getWearable()->getType(); + updatePanelPickerControls(type); + updateTypeSpecificControls(type); + } } void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type) @@ -992,6 +1004,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::onTabExpandedCollapsed(const LLSD& param, U8 index) @@ -1217,4 +1236,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 6f9ac82407..0953f09b6c 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -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; @@ -86,6 +88,13 @@ private: void toggleTypeSpecificControls(LLWearableType::EType type); void updateTypeSpecificControls(LLWearableType::EType type); + //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; @@ -122,6 +131,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/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 010d593b27..707fc1555a 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") ) { diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 0a464b3b6c..466c154f36 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/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4371396629..a72d7f9227 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7887,3 +7887,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..df47e9ba1d 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -462,7 +462,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 +1041,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 cf3fb01b5a..a8e2f446c2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1332,6 +1332,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); + } + + 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() //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 8e6d9698f2..189c1ac808 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -179,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 diff --git a/indra/newview/llworldview.cpp b/indra/newview/llworldview.cpp index 7261e63147..b44a365677 100644 --- a/indra/newview/llworldview.cpp +++ b/indra/newview/llworldview.cpp @@ -44,6 +44,7 @@ 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) @@ -59,3 +60,8 @@ void LLWorldView::reshape(S32 width, S32 height, BOOL called_from_parent) 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/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 2c1cb59387..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" /> 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 895cc4e3cc..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,6 +347,7 @@ 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" |