Automated merge with ssh://hg.lindenlab.com/dessie/viewer-public
commit
61dfb969ea
|
|
@ -215,7 +215,9 @@ 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
|
||||
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));
|
||||
|
|
@ -893,8 +895,68 @@ 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::initializePanel()
|
||||
{
|
||||
if (!mWearablePtr)
|
||||
|
|
@ -969,6 +1031,7 @@ 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();
|
||||
}
|
||||
|
||||
|
|
@ -994,52 +1057,6 @@ void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type)
|
|||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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 (index >= wearable_entry->mSubparts.size())
|
||||
{
|
||||
llinfos << "accordion tab expanded for invalid subpart. Wearable type: " << mWearablePtr->getType() << " subpart num: " << index << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
ESubpart subpart_e = wearable_entry->mSubparts[index];
|
||||
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->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
|
||||
gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
|
||||
gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
|
||||
gMorphView->setCameraDistToDefault();
|
||||
if (gSavedSettings.getBOOL("AppearanceCameraMovement"))
|
||||
{
|
||||
gMorphView->updateCamera();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelEditWearable::updateScrollingPanelUI()
|
||||
{
|
||||
// do nothing if we don't have a valid wearable we're editing
|
||||
|
|
|
|||
|
|
@ -63,10 +63,12 @@ public:
|
|||
void saveChanges();
|
||||
void revertChanges();
|
||||
|
||||
void showDefaultSubpart();
|
||||
void onTabExpandedCollapsed(const LLSD& param, U8 index);
|
||||
|
||||
static void onRevertButtonClicked(void* userdata);
|
||||
void onCommitSexChange();
|
||||
|
||||
void onTabExpandedCollapsed(const LLSD& param, U8 index);
|
||||
|
||||
private:
|
||||
typedef std::map<F32, LLViewerVisualParam*> value_map_t;
|
||||
|
|
@ -86,6 +88,9 @@ private:
|
|||
void toggleTypeSpecificControls(LLWearableType::EType type);
|
||||
void updateTypeSpecificControls(LLWearableType::EType type);
|
||||
|
||||
// changes camera angle to default for selected subpart
|
||||
void changeCamera(U8 subpart);
|
||||
|
||||
// the pointer to the wearable we're editing. NULL means we're not editing a wearable.
|
||||
LLWearable *mWearablePtr;
|
||||
LLViewerInventoryItem* mWearableItem;
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ left="0"
|
|||
Jacket:
|
||||
</string>
|
||||
<string
|
||||
name="skirt_skirt_desc_text">
|
||||
name="skirt_desc_text">
|
||||
Skirt:
|
||||
</string>
|
||||
<string
|
||||
|
|
|
|||
Loading…
Reference in New Issue