/** * @file llpaneleditwearable.h * @brief A LLPanel dedicated to the editing of wearables. * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #ifndef LL_LLPANELEDITWEARABLE_H #define LL_LLPANELEDITWEARABLE_H #include "llpanel.h" #include "llscrollingpanellist.h" #include "llmodaldialog.h" #include "llavatarappearancedefines.h" #include "llwearabletype.h" class LLAccordionCtrl; class LLCheckBoxCtrl; class LLViewerWearable; class LLTextBox; class LLViewerInventoryItem; class LLViewerVisualParam; class LLVisualParamHint; class LLViewerJointMesh; class LLAccordionCtrlTab; class LLJoint; class LLLineEditor; class LLPanelEditWearable : public LLPanel { public: LLPanelEditWearable( ); virtual ~LLPanelEditWearable(); /*virtual*/ bool postBuild(); /*virtual*/ bool isDirty() const; // LLUICtrl /*virtual*/ void draw(); void onClose(); // changes camera angle to default for selected subpart void changeCamera(U8 subpart); LLViewerWearable* getWearable() { return mWearablePtr; } void setWearable(LLViewerWearable *wearable, bool disable_camera_switch = false); void saveChanges(bool force_save_as = false); void revertChanges(); void showDefaultSubpart(); void onTabExpandedCollapsed(const LLSD& param, U8 index); void updateScrollingPanelList(); static void onRevertButtonClicked(void* userdata); static void onBackButtonClicked(void* userdata); void onCommitSexChange(); void onSaveAsButtonClicked(); void saveAsCallback(const LLSD& notification, const LLSD& response); virtual void setVisible(bool visible); private: typedef std::map<F32, LLViewerVisualParam*> value_map_t; void showWearable(LLViewerWearable* wearable, bool show, bool disable_camera_switch = false); void updateScrollingPanelUI(); LLPanel* getPanel(LLWearableType::EType type); void getSortedParams(value_map_t &sorted_params, const std::string &edit_group); void buildParamList(LLScrollingPanelList *panel_list, value_map_t &sorted_params, LLAccordionCtrlTab *tab, LLJoint* jointp); // update bottom bar buttons ("Save", "Revert", etc) void updateVerbs(); void onColorSwatchCommit(const LLUICtrl*); void onTexturePickerCommit(const LLUICtrl*); void updatePanelPickerControls(LLWearableType::EType type); void toggleTypeSpecificControls(LLWearableType::EType type); void updateTypeSpecificControls(LLWearableType::EType type); //alpha mask checkboxes void configureAlphaCheckbox(LLAvatarAppearanceDefines::ETextureIndex te, const std::string& name); void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLAvatarAppearanceDefines::ETextureIndex te); void updateAlphaCheckboxes(); void initPreviousAlphaTextures(); void initPreviousAlphaTextureEntry(LLAvatarAppearanceDefines::ETextureIndex te); // callback for HeightUnits parameter. bool changeHeightUnits(const LLSD& new_value); // updates current metric and replacement metric label text void updateMetricLayout(bool new_value); // updates avatar height label void updateAvatarHeightLabel(); void onWearablePanelVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl); void setWearablePanelVisibilityChangeCallback(LLPanel* bodypart_panel); // *HACK Remove this when serverside texture baking is available on all regions. void incrementCofVersionLegacy(); // the pointer to the wearable we're editing. NULL means we're not editing a wearable. LLViewerWearable *mWearablePtr; LLViewerInventoryItem* mWearableItem; // these are constant no matter what wearable we're editing LLButton *mBtnRevert; LLButton *mBtnBack; std::string mBackBtnLabel; LLTextBox *mPanelTitle; LLTextBox *mDescTitle; LLTextBox *mTxtAvatarHeight; // localized and parameterized strings that used to build avatar_height_label std::string mMeters; std::string mFeet; std::string mHeight; LLUIString mHeightValue; LLUIString mReplacementMetricUrl; // color for mHeight string LLUIColor mAvatarHeightLabelColor; // color for mHeightValue string LLUIColor mAvatarHeightValueLabelColor; // This text editor reference will change each time we edit a new wearable - // it will be grabbed from the currently visible panel LLLineEditor *mNameEditor; // The following panels will be shown/hidden based on what wearable we're editing // body parts LLPanel *mPanelShape; LLPanel *mPanelSkin; LLPanel *mPanelEyes; LLPanel *mPanelHair; //clothes LLPanel *mPanelShirt; LLPanel *mPanelPants; LLPanel *mPanelShoes; LLPanel *mPanelSocks; LLPanel *mPanelJacket; LLPanel *mPanelGloves; LLPanel *mPanelUndershirt; LLPanel *mPanelUnderpants; LLPanel *mPanelSkirt; LLPanel *mPanelAlpha; LLPanel *mPanelTattoo; LLPanel *mPanelUniversal; LLPanel *mPanelPhysics; typedef std::map<std::string, LLAvatarAppearanceDefines::ETextureIndex> string_texture_index_map_t; string_texture_index_map_t mAlphaCheckbox2Index; typedef std::map<LLAvatarAppearanceDefines::ETextureIndex, LLUUID> s32_uuid_map_t; s32_uuid_map_t mPreviousAlphaTexture; }; #endif