Merge branch 'V2MultiWear' of git://github.com/Shyotl/SingularityViewer into V2MultiWear

This commit is contained in:
Lirusaito
2012-05-17 02:09:20 -04:00
8 changed files with 527 additions and 145 deletions

View File

@@ -502,6 +502,16 @@ LLUICtrl* LLUICtrl::getParentUICtrl() const
return NULL; return NULL;
} }
// *TODO: Deprecate; for backwards compatability only:
boost::signals2::connection LLUICtrl::setCommitCallback( boost::function<void (LLUICtrl*,void*)> cb, void* data)
{
return setCommitCallback( boost::bind(cb, _1, data));
}
boost::signals2::connection LLUICtrl::setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb )
{
if (!mValidateSignal) mValidateSignal = new enable_signal_t();
return mValidateSignal->connect(boost::bind(cb, _2));
}
// virtual // virtual
void LLUICtrl::setTentative(BOOL b) void LLUICtrl::setTentative(BOOL b)
{ {

View File

@@ -133,6 +133,9 @@ public:
void setCommitCallback( void (*cb)(LLUICtrl*, void*) ) { mCommitCallback = cb; } void setCommitCallback( void (*cb)(LLUICtrl*, void*) ) { mCommitCallback = cb; }
void setValidateBeforeCommit( BOOL(*cb)(LLUICtrl*, void*) ) { mValidateCallback = cb; } void setValidateBeforeCommit( BOOL(*cb)(LLUICtrl*, void*) ) { mValidateCallback = cb; }
// *TODO: Deprecate; for backwards compatability only:
boost::signals2::connection setCommitCallback( boost::function<void (LLUICtrl*,void*)> cb, void* data);
boost::signals2::connection setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb );
static LLView* fromXML(LLXMLNodePtr node, LLView* parent, class LLUICtrlFactory* factory); static LLView* fromXML(LLXMLNodePtr node, LLView* parent, class LLUICtrlFactory* factory);

View File

@@ -47,6 +47,7 @@
#include "llvoavatarself.h" #include "llvoavatarself.h"
#include "llviewerregion.h" #include "llviewerregion.h"
#include "llwearablelist.h" #include "llwearablelist.h"
#include "llinventorypanel.h"
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a) // [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a)
#include "rlvhandler.h" #include "rlvhandler.h"
#include "rlvhelper.h" #include "rlvhelper.h"
@@ -1228,13 +1229,17 @@ void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& ds
} }
// Copy contents of src_id to dst_id. // Copy contents of src_id to dst_id.
void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb)
LLPointer<LLInventoryCallback> cb)
{ {
LLInventoryModel::cat_array_t* cats; LLInventoryModel::cat_array_t* cats;
LLInventoryModel::item_array_t* items; LLInventoryModel::item_array_t* items;
gInventory.getDirectDescendentsOf(src_id, cats, items); gInventory.getDirectDescendentsOf(src_id, cats, items);
llinfos << "copying " << items->count() << " items" << llendl; llinfos << "copying " << items->count() << " items" << llendl;
copyItems(dst_id, items, cb);
}
void LLAppearanceMgr::copyItems(const LLUUID& dst_id, LLInventoryModel::item_array_t* items, LLPointer<LLInventoryCallback> cb)
{
for (LLInventoryModel::item_array_t::const_iterator iter = items->begin(); for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
iter != items->end(); iter != items->end();
++iter) ++iter)
@@ -1274,13 +1279,25 @@ void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LL
case LLAssetType::AT_BODYPART: case LLAssetType::AT_BODYPART:
case LLAssetType::AT_GESTURE: case LLAssetType::AT_GESTURE:
{ {
llinfos << "copying inventory item " << item->getName() << llendl; if(!item->getPermissions().allowCopyBy(gAgent.getID()))
copy_inventory_item(gAgent.getID(), {
item->getPermissions().getOwner(), link_inventory_item(gAgent.getID(),
item->getUUID(), item->getUUID(),
dst_id, dst_id,
item->getName(), item->getName(),
cb); item->getDescription(),
LLAssetType::AT_LINK, cb);
}
else
{
llinfos << "copying inventory item " << item->getName() << llendl;
copy_inventory_item(gAgent.getID(),
item->getPermissions().getOwner(),
item->getUUID(),
dst_id,
item->getName(),
cb);
}
break; break;
} }
default: default:
@@ -2892,11 +2909,39 @@ void LLAppearanceMgr::updateClothingOrderingInfo(LLUUID cat_id, bool update_base
class LLScrollOnFirstItem : public LLInventoryCallback
class LLShowCreatedOutfit: public LLInventoryCallback
{ {
public: public:
LLShowCreatedOutfit(LLUUID& folder_id, bool show_panel = true): mFolderID(folder_id), mShowPanel(show_panel) LLScrollOnFirstItem(const LLUUID&folder_id, bool do_scroll) : mFirstItemCreated(!do_scroll), mFolderID(folder_id)
{}
virtual void fire(const LLUUID& item_id)
{
if(mFirstItemCreated)
return;
mFirstItemCreated = true;
if (LLInventoryPanel::getActiveInventoryPanel())
{
if( LLFolderView* root = LLInventoryPanel::getActiveInventoryPanel()->getRootFolder())
{
LLFolderViewItem* folder = dynamic_cast<LLFolderViewFolder*>(root->getItemByID(mFolderID));
if(folder)
{
folder->openItem();
root->setSelection(folder,true,false);
root->scrollToShowSelection();
}
}
}
}
bool mFirstItemCreated;
LLUUID mFolderID;
};
class LLShowCreatedOutfit: public LLScrollOnFirstItem
{
public:
LLShowCreatedOutfit(const LLUUID& folder_id, bool show_panel = true): LLScrollOnFirstItem(folder_id, show_panel), mFolderID(folder_id), mShowPanel(show_panel)
{} {}
virtual ~LLShowCreatedOutfit() virtual ~LLShowCreatedOutfit()
@@ -2929,10 +2974,7 @@ public:
LLAppearanceMgr::getInstance()->updatePanelOutfitName(""); LLAppearanceMgr::getInstance()->updatePanelOutfitName("");
} }
virtual void fire(const LLUUID&) protected:
{}
private:
LLUUID mFolderID; LLUUID mFolderID;
bool mShowPanel; bool mShowPanel;
}; };
@@ -2961,6 +3003,299 @@ LLUUID LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, b
return folder_id; return folder_id;
} }
//Given an array of items from COF. v3 outfit behavior.
LLUUID LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, LLInventoryModel::item_array_t& items, bool show_panel )
{
if (!isAgentAvatarValid()) return LLUUID::null;
else if (items.empty()) return LLUUID::null;
gAgentWearables.notifyLoadingStarted();
// First, make a folder in the My Outfits directory.
const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
LLUUID folder_id = gInventory.createNewCategory(
parent_id,
LLFolderType::FT_OUTFIT,
new_folder_name);
updateClothingOrderingInfo();
LLPointer<LLInventoryCallback> cb = new LLShowCreatedOutfit(folder_id,show_panel);
copyItems(folder_id, &items, cb);
createBaseOutfitLink(folder_id, cb);
dumpCat(folder_id,"COF, new outfit");
return folder_id;
}
//Creates item copies before links and ties all requests to a sole handler
//Requests are batched into subbatches, as too many requests at once causes the sim to
//stall with the inventory requests.
//This handler will also ensure all 'copy' requests are finished before 'link' requests are
//sent out. This behavior isn't really needed for nomod/nocopy items, but it is for multi-worn
//clothing.
//Note that the 'wear' process is pretty convoluted, but its a cludge to get rlva support in without
//tinkering with LLAppearanceMgr further.
//To use this:
// 1) assign an LLPointer the newly created LLCreateLegacyOutfit object.
// 2) Stuff with requests via makeLink and makeCopy
// 3) Call dispatch()
// 4) Let the LLPointer go out of scope.
class LLCreateLegacyOutfit : public LLShowCreatedOutfit
{
public:
LLCreateLegacyOutfit(const LLUUID& folder_id, bool show_panel) :
LLShowCreatedOutfit(folder_id, show_panel), mFolderID(folder_id), mFailed(false)
{}
virtual ~LLCreateLegacyOutfit()
{
if (!LLApp::isRunning() || mFailed)
return;
LLInventoryModel::item_array_t body_items, wear_items, obj_items, gest_items;
for(std::set<LLUUID>::const_iterator it = mWearItems.begin(); it != mWearItems.end(); ++it)
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(item)
{
switch(item->getType())
{
case LLAssetType::AT_BODYPART:
body_items.push_back(item);
break;
case LLAssetType::AT_CLOTHING:
wear_items.push_back(item);
break;
case LLAssetType::AT_OBJECT:
obj_items.push_back(item);
break;
case LLAssetType::AT_GESTURE:
gest_items.push_back(item);
break;
default:
break;
}
}
}
if(!body_items.empty() || !wear_items.empty() || !obj_items.empty() || !gest_items.empty())
LLAppearanceMgr::instance().updateCOF(body_items, wear_items, obj_items, gest_items, false);
}
private:
class LLCreateBase : public LLInventoryCallback
{
public:
LLCreateBase(LLViewerInventoryItem* item, const LLUUID& folder_id, LLPointer<LLCreateLegacyOutfit> cb) :
mCallback(cb), mItem(item), mFolderID(folder_id)
{}
virtual ~LLCreateBase()
{
if(mCallback)
mCallback->finished(this, LLUUID::null);
}
virtual void dispatch() = 0;
virtual void fire(const LLUUID& item_id)
{
mCallback->finished(this, item_id);
mCallback = NULL;
}
const LLViewerInventoryItem* getItem() const {return mItem;}
protected:
LLPointer<LLViewerInventoryItem> mItem;
LLPointer<LLCreateLegacyOutfit> mCallback;
const LLUUID mFolderID;
};
class LLCreateCopy : public LLCreateBase
{
public:
LLCreateCopy(LLViewerInventoryItem* item, bool create_copy, const LLUUID& folder_id, LLPointer<LLCreateLegacyOutfit> cb) :
LLCreateBase(item,folder_id,cb), mCreateLink(create_copy),
mLinkDesc((mCreateLink && item->getIsLinkType()) ? item->LLInventoryItem::getDescription() : "" )
{}
virtual void dispatch()
{
const LLViewerInventoryItem* base_item = mItem->getLinkedItem() ? mItem->getLinkedItem() : mItem.get();
copy_inventory_item(gAgent.getID(),
base_item->getPermissions().getOwner(),
base_item->getUUID(),
mFolderID,
base_item->getName(),
this);
}
virtual void fire(const LLUUID& item_id)
{
if(mCreateLink)
mCallback->makeLink(gInventory.getItem(item_id), mLinkDesc);
LLCreateBase::fire(item_id);
}
private:
bool mCreateLink;
std::string mLinkDesc;
};
class LLCreateLink : public LLCreateBase
{
public:
LLCreateLink(LLViewerInventoryItem* item, const std::string& desc, const LLUUID& folder_id, LLPointer<LLCreateLegacyOutfit> cb) :
LLCreateBase(item,folder_id,cb), mDesc(desc)
{}
virtual void dispatch()
{
link_inventory_item(gAgent.getID(),
mItem->getLinkedUUID(),
mFolderID,
mItem->getName(),
mDesc,
LLAssetType::AT_LINK,
this);
}
private:
const std::string mDesc;
};
public:
void makeLink(LLViewerInventoryItem* item, const std::string desc)
{
if(!item)
return;
mPendingLinks.push_back(new LLCreateLink(item, desc, mFolderID, this));
}
void makeCopy(LLViewerInventoryItem* item, bool create_link)
{
if(!item)
return;
mPendingCopies.push_back(new LLCreateCopy(item, create_link, mFolderID, this));
}
void finished(const LLCreateBase* cb, const LLUUID item_id)
{
if(!LLApp::isRunning())
{
mPendingCopies.clear();
mPendingLinks.clear();
return;
}
if(item_id.notNull())
LLShowCreatedOutfit::fire(item_id);
std::vector<const LLCreateBase*>::iterator it = std::find(mActiveRequests.begin(), mActiveRequests.end(),cb);
if(it != mActiveRequests.end())
{
const LLViewerInventoryItem* old_item = (*it)->getItem();
if(item_id.notNull())
{
const LLViewerInventoryItem* item = gInventory.getItem(item_id);
if ((rlv_handler_t::isEnabled()) &&
//If the old item can be removed, but a new one can't take its place, then just use the original item again.
(((rlvPredCanRemoveItem(old_item) && !rlvPredCanWearItem(item,RLV_WEAR_REPLACE))) ||
//If the old item cannot be removed then just use the original item again.
!rlvPredCanRemoveItem(old_item)))
{
item = old_item;
}
if(item->getIsLinkType())
mWearItems.erase(item->getLinkedUUID());
mWearItems.insert(item->getUUID());
}
else
mWearItems.insert(old_item->getUUID());
mActiveRequests.erase(it);
if(!item_id.notNull())
mFailed = true;
if(mActiveRequests.empty())
dispatch(); //Fire off any pending requests.
}
}
void dispatch()
{
const S32 max_batch = 5;
S32 count=0;
if(!sendRequests(mPendingCopies,count,max_batch))
sendRequests(mPendingLinks,count,max_batch); //IFF there are NO copy requests pending.
gInventory.notifyObservers();
}
private:
bool sendRequests(std::vector<LLPointer<LLCreateBase> >& list, S32& count, const S32& max_batch)
{
bool handled = false;
for(std::vector<LLPointer<LLCreateBase> >::iterator it = list.begin();it!=list.end();)
{
if(count >= max_batch)
break;
LLPointer<LLCreateBase> cb = (*it);
it=list.erase(it);
if(cb)
{
cb->dispatch();
mActiveRequests.push_back(cb.get());
++count;
handled = true;
}
}
return handled;
}
LLUUID mFolderID;
bool mFailed;
std::vector<LLPointer<LLCreateBase> > mPendingCopies;
std::vector<LLPointer<LLCreateBase> > mPendingLinks;
std::set<LLUUID> mWearItems;
std::vector<const LLCreateBase*> mActiveRequests;
};
//Given an array of items from COF. Will only use links for no-copy, no-mod, or multi-worn clothing.
LLUUID LLAppearanceMgr::makeNewOutfitLegacy(const std::string& new_folder_name, LLInventoryModel::item_array_t& items, bool use_links, bool show_panel )
{
if (!isAgentAvatarValid()) return LLUUID::null;
else if (items.empty()) return LLUUID::null;
gAgentWearables.notifyLoadingStarted();
// First, make a folder in the My Outfits directory.
const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
LLUUID folder_id = gInventory.createNewCategory(
parent_id,
LLFolderType::FT_NONE,
new_folder_name);
updateClothingOrderingInfo();
LLInventoryModel::item_array_t base_items;
LLInventoryModel::item_array_t remove_items;
LLPointer<LLCreateLegacyOutfit> cb = new LLCreateLegacyOutfit(folder_id,show_panel);
for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
iter != items.end();
++iter)
{
LLViewerInventoryItem* item = (*iter);
LLViewerInventoryItem* base_item = item->getLinkedItem() ? item->getLinkedItem() : item;
bool is_copy = base_item->getPermissions().allowCopyBy(gAgent.getID());
//Just treat 'object' type as modifiable... permission slam screws them up pretty well.
bool is_mod = base_item->getInventoryType() == LLInventoryType::IT_OBJECT || base_item->getPermissions().allowModifyBy(gAgent.getID());
//If it's multi-worn we want to create a copy of the item if possible AND create a new link to that new copy with the same desc as the old link.
bool is_multi = base_item->isWearableType() && gAgentWearables.getWearableCount(base_item->getWearableType()) > 1 ;
if( use_links && (!is_copy || !is_mod) )
{
cb->makeLink(item,item->LLInventoryItem::getDescription());
}
else if( is_copy )
{
cb->makeCopy(item,is_multi && use_links);
}
}
cb->dispatch();
return folder_id;
}
void LLAppearanceMgr::wearBaseOutfit() void LLAppearanceMgr::wearBaseOutfit()
{ {
const LLUUID& base_outfit_id = getBaseOutfitUUID(); const LLUUID& base_outfit_id = getBaseOutfitUUID();

View File

@@ -80,6 +80,8 @@ public:
void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb); LLPointer<LLInventoryCallback> cb);
void copyItems(const LLUUID& dst_id, LLInventoryModel::item_array_t* items, LLPointer<LLInventoryCallback> cb);
// Return whether this folder contains minimal contents suitable for making a full outfit. // Return whether this folder contains minimal contents suitable for making a full outfit.
BOOL getCanMakeFolderIntoOutfit(const LLUUID& folder_id); BOOL getCanMakeFolderIntoOutfit(const LLUUID& folder_id);
@@ -174,6 +176,8 @@ public:
LLUUID makeNewOutfitLinks(const std::string& new_folder_name,bool show_panel = true); LLUUID makeNewOutfitLinks(const std::string& new_folder_name,bool show_panel = true);
LLUUID makeNewOutfitLinks(const std::string& new_folder_name, LLInventoryModel::item_array_t& item_list, bool show_panel = true);
LLUUID makeNewOutfitLegacy(const std::string& new_folder_name, LLInventoryModel::item_array_t& items, bool use_links, bool show_panel = true);
bool moveWearable(LLViewerInventoryItem* item, bool closer_to_body); bool moveWearable(LLViewerInventoryItem* item, bool closer_to_body);

View File

@@ -241,11 +241,18 @@ public:
pOutfitFoldersCtrl->setCallbackUserData(this); pOutfitFoldersCtrl->setCallbackUserData(this);
} }
BOOL getRenameClothing() bool getUseOutfits()
{
return childGetValue("checkbox_use_outfits").asBoolean();
}
bool getUseLinks()
{
return childGetValue("checkbox_use_links").asBoolean();
}
/*bool getRenameClothing()
{ {
return childGetValue("rename").asBoolean(); return childGetValue("rename").asBoolean();
}*/
}
virtual void draw() virtual void draw()
{ {
BOOL one_or_more_items_selected = FALSE; BOOL one_or_more_items_selected = FALSE;
@@ -269,7 +276,7 @@ public:
{ {
LLWearableType::EType wtType = (LLWearableType::EType)wearable; LLWearableType::EType wtType = (LLWearableType::EType)wearable;
if ( ( (0 <= wtType) && (wtType < LLWearableType::WT_COUNT) ) && if ( ( (0 <= wtType) && (wtType < LLWearableType::WT_COUNT) ) &&
( (LLAssetType::AT_BODYPART != LLWearableType::getAssetType(wtType)) || (!gSavedSettings.getBOOL("UseOutfitFolders")) ) ) ( (LLAssetType::AT_BODYPART != LLWearableType::getAssetType(wtType)) || (!getUseOutfits()) ) )
{ {
std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel(wtType); std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel(wtType);
childSetEnabled(name, enabled); childSetEnabled(name, enabled);
@@ -277,25 +284,32 @@ public:
} }
} }
void getIncludedItems( LLDynamicArray<S32> &wearables_to_include, LLDynamicArray<S32> &attachments_to_include ) void getIncludedItems( LLInventoryModel::item_array_t& item_list )
{ {
for( S32 i = 0; i < (S32)mCheckBoxList.size(); i++) LLInventoryModel::cat_array_t *cats;
LLInventoryModel::item_array_t *items;
gInventory.getDirectDescendentsOf(LLAppearanceMgr::instance().getCOF(), cats, items);
for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
iter != items->end();
++iter)
{ {
std::string name = mCheckBoxList[i].first; LLViewerInventoryItem* item = (*iter);
BOOL checked = childGetValue(name).asBoolean(); if(!item)
if (i < LLWearableType::WT_COUNT ) continue;
if(item->isWearableType())
{ {
if( checked ) LLWearableType::EType type = item->getWearableType();
if (type < LLWearableType::WT_COUNT && childGetValue(mCheckBoxList[type].first).asBoolean())
{ {
wearables_to_include.put(i); item_list.push_back(item);
} }
} }
else else
{ {
if( checked ) LLViewerJointAttachment* attachment = gAgentAvatarp->getWornAttachmentPoint(item->getLinkedUUID());
if(attachment && childGetValue(std::string("checkbox_")+attachment->getName()).asBoolean())
{ {
S32 attachment_pt = mCheckBoxList[i].second; item_list.push_back(item);
attachments_to_include.put( attachment_pt );
} }
} }
} }
@@ -350,7 +364,7 @@ public:
void refresh() void refresh()
{ {
BOOL fUseOutfits = gSavedSettings.getBOOL("UseOutfitFolders"); BOOL fUseOutfits = getUseOutfits();
for (S32 idxType = 0; idxType < LLWearableType::WT_COUNT; idxType++ ) for (S32 idxType = 0; idxType < LLWearableType::WT_COUNT; idxType++ )
{ {
@@ -1982,7 +1996,7 @@ void LLFloaterCustomize::onBtnMakeOutfit( void* userdata )
for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ ) for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
{ {
BOOL enabled = (gAgentWearables.getWearable( (LLWearableType::EType) i, 0 ) != NULL); // TODO: MULTI-WEARABLE BOOL enabled = (gAgentWearables.getWearableCount( (LLWearableType::EType) i )); // TODO: MULTI-WEARABLE
BOOL selected = (enabled && (LLWearableType::WT_SHIRT <= i) && (i < LLWearableType::WT_COUNT)); // only select clothing by default BOOL selected = (enabled && (LLWearableType::WT_SHIRT <= i) && (i < LLWearableType::WT_COUNT)); // only select clothing by default
if (gAgent.isTeen() if (gAgent.isTeen()
&& !edit_wearable_for_teens((LLWearableType::EType)i)) && !edit_wearable_for_teens((LLWearableType::EType)i))
@@ -2007,10 +2021,14 @@ void LLFloaterCustomize::onMakeOutfitCommit( LLMakeOutfitDialog* dialog, void* u
LLDynamicArray<S32> wearables_to_include; LLDynamicArray<S32> wearables_to_include;
LLDynamicArray<S32> attachments_to_include; // attachment points LLDynamicArray<S32> attachments_to_include; // attachment points
dialog->getIncludedItems( wearables_to_include, attachments_to_include ); LLInventoryModel::item_array_t item_list;
dialog->getIncludedItems(item_list);
// MULTI-WEARABLES TODO // MULTI-WEARABLES TODO
//LLAppearanceMgr::getInstance()->makeNewOutfit( dialog->getFolderName(), wearables_to_include, attachments_to_include, dialog->getRenameClothing() ); if(dialog->getUseOutfits())
LLAppearanceMgr::instance().makeNewOutfitLinks( dialog->getFolderName(), item_list);
else
LLAppearanceMgr::instance().makeNewOutfitLegacy( dialog->getFolderName(), item_list, dialog->getUseLinks());
} }
} }

View File

@@ -1599,7 +1599,7 @@ LLPanelAvatar::~LLPanelAvatar()
BOOL LLPanelAvatar::canClose() BOOL LLPanelAvatar::canClose()
{ {
return mPanelClassified && mPanelClassified->canClose(); return !mPanelClassified || mPanelClassified->canClose();
} }
void LLPanelAvatar::setAvatar(LLViewerObject *avatarp) void LLPanelAvatar::setAvatar(LLViewerObject *avatarp)
@@ -1645,6 +1645,7 @@ void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status)
online_status = ONLINE_STATUS_YES; online_status = ONLINE_STATUS_YES;
} }
if(mPanelSecondLife)
mPanelSecondLife->childSetVisible("online_yes", online_status == ONLINE_STATUS_YES); mPanelSecondLife->childSetVisible("online_yes", online_status == ONLINE_STATUS_YES);
// Since setOnlineStatus gets called after setAvatarID // Since setOnlineStatus gets called after setAvatarID
@@ -1711,9 +1712,9 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
(*it)->setAvatarID(avatar_id); (*it)->setAvatarID(avatar_id);
} }
mPanelSecondLife->enableControls(own_avatar && mAllowEdit); if (mPanelSecondLife) mPanelSecondLife->enableControls(own_avatar && mAllowEdit);
mPanelWeb->enableControls(own_avatar && mAllowEdit); if (mPanelWeb) mPanelWeb->enableControls(own_avatar && mAllowEdit);
mPanelAdvanced->enableControls(own_avatar && mAllowEdit); if (mPanelAdvanced) mPanelAdvanced->enableControls(own_avatar && mAllowEdit);
// Teens don't have this. // Teens don't have this.
if (mPanelFirstLife) mPanelFirstLife->enableControls(own_avatar && mAllowEdit); if (mPanelFirstLife) mPanelFirstLife->enableControls(own_avatar && mAllowEdit);
@@ -1772,16 +1773,16 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
{ {
// While we're waiting for data off the network, clear out the // While we're waiting for data off the network, clear out the
// old data. // old data.
mPanelSecondLife->clearControls(); if(mPanelSecondLife) mPanelSecondLife->clearControls();
mPanelPicks->deletePickPanels(); if(mPanelPicks) mPanelPicks->deletePickPanels();
mPanelPicks->setDataRequested(false); if(mPanelPicks) mPanelPicks->setDataRequested(false);
mPanelClassified->deleteClassifiedPanels(); if(mPanelClassified) mPanelClassified->deleteClassifiedPanels();
mPanelClassified->setDataRequested(false); if(mPanelClassified) mPanelClassified->setDataRequested(false);
mPanelNotes->clearControls(); if(mPanelNotes) mPanelNotes->clearControls();
mPanelNotes->setDataRequested(false); if(mPanelNotes) mPanelNotes->setDataRequested(false);
mHaveNotes = false; mHaveNotes = false;
mLastNotes.clear(); mLastNotes.clear();

View File

@@ -146,7 +146,10 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
} }
else else
{ {
gAgentAvatarp->updateRegion(regionp); if (isAgentAvatarValid())
{
gAgentAvatarp->updateRegion(regionp);
}
} }
res = gAgentAvatarp; res = gAgentAvatarp;
} }

View File

@@ -3,280 +3,288 @@
can_minimize="false" can_resize="false" can_tear_off="true" enabled="true" can_minimize="false" can_resize="false" can_tear_off="true" enabled="true"
height="530" left="278" min_height="100" min_width="100" height="530" left="278" min_height="100" min_width="100"
mouse_opaque="true" name="modal container" title="" width="515"> mouse_opaque="true" name="modal container" title="" width="515">
<button bottom="5" enabled="true" font="SansSerif" halign="center" height="20" <button bottom="5" enabled="true" font="SansSerif" halign="center" height="20"
label="Save" label_selected="Save" left="171" mouse_opaque="true" label="Save" label_selected="Save" left="171" mouse_opaque="true"
name="Save" scale_image="true" width="82" /> name="Save" scale_image="true" width="82" />
<button bottom="5" enabled="true" font="SansSerif" halign="center" height="20" <button bottom="5" enabled="true" font="SansSerif" halign="center" height="20"
label="Cancel" label_selected="Cancel" left="261" mouse_opaque="true" label="Cancel" label_selected="Cancel" left="261" mouse_opaque="true"
name="Cancel" scale_image="true" width="82" /> name="Cancel" scale_image="true" width="82" />
<check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Shape" left="13" height="16" initial_value="false" label="Shape" left="13"
mouse_opaque="true" name="checkbox_Shape" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_shape" radio_style="false" width="100" />
<check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Skin" left="13" height="16" initial_value="false" label="Skin" left="13"
mouse_opaque="true" name="checkbox_Skin" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_skin" radio_style="false" width="100" />
<check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Hair" left="13" height="16" initial_value="false" label="Hair" left="13"
mouse_opaque="true" name="checkbox_Hair" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_hair" radio_style="false" width="100" />
<check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Eyes" left="13" height="16" initial_value="false" label="Eyes" left="13"
mouse_opaque="true" name="checkbox_Eyes" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_eyes" radio_style="false" width="100" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="90" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="75" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13" font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
mouse_opaque="true" name="Options:" v_pad="0" width="100"> mouse_opaque="true" name="Options:" v_pad="0" width="100">
Options: Options:
</text> </text>
<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" <!--<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Rename Clothing To Folder Name" height="16" initial_value="false" label="Rename Clothing To Folder Name"
left="13" mouse_opaque="true" name="rename" radio_style="false" width="210" /> left="13" mouse_opaque="true" name="rename" radio_style="false" width="210" />-->
<check_box name="checkbox_use_outfits" control_name="UseOutfitFolders" initial_value="false"
enabled="true" label="Use Viewer 2 outfit folders" font="SansSerifSmall"
bottom_delta="-20" left_delta="0" follows="left|top" height="16" width="300"
mouse_opaque="true" radio_style="false" />
<check_box name="checkbox_use_links" control_name="UseInventoryLinks" initial_value="false" <check_box name="checkbox_use_links" control_name="UseInventoryLinks" initial_value="false"
enabled="true" label="Use links for no-copy items" font="SansSerifSmall" enabled="true" label="Use links for non-copy, no-mod, or multi-worn items" font="SansSerifSmall"
bottom_delta="-20" left_delta="0" follows="left|top" height="16" width="300" bottom_delta="-20" left_delta="0" follows="left|top" height="16" width="300"
mouse_opaque="true" radio_style="false" /> mouse_opaque="true" radio_style="false" />
<check_box name="checkbox_use_outfits" control_name="UseOutfitFolders" initial_value="false" <check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
enabled="true" label="Use Viewer 2 outfit folders" font="SansSerifSmall"
bottom_delta="-20" left_delta="0" follows="left|top" height="16" width="300"
mouse_opaque="true" radio_style="false" />
<check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Shirt" left="113" height="16" initial_value="false" label="Shirt" left="113"
mouse_opaque="true" name="checkbox_shirt" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_shirt" radio_style="false" width="100" />
<check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Pants" left="113" height="16" initial_value="false" label="Pants" left="113"
mouse_opaque="true" name="checkbox_pants" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_pants" radio_style="false" width="100" />
<check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Shoes" left="113" height="16" initial_value="false" label="Shoes" left="113"
mouse_opaque="true" name="checkbox_shoes" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_shoes" radio_style="false" width="100" />
<check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Socks" left="113" height="16" initial_value="false" label="Socks" left="113"
mouse_opaque="true" name="checkbox_socks" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_socks" radio_style="false" width="100" />
<check_box bottom="-296" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-296" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Jacket" left="113" height="16" initial_value="false" label="Jacket" left="113"
mouse_opaque="true" name="checkbox_jacket" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_jacket" radio_style="false" width="100" />
<check_box bottom="-316" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-316" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Gloves" left="113" height="16" initial_value="false" label="Gloves" left="113"
mouse_opaque="true" name="checkbox_gloves" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_gloves" radio_style="false" width="100" />
<check_box bottom="-336" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-336" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Undershirt" left="113" height="16" initial_value="false" label="Undershirt" left="113"
mouse_opaque="true" name="checkbox_undershirt" radio_style="false" mouse_opaque="true" name="checkbox_undershirt" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-356" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-356" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Underpants" left="113" height="16" initial_value="false" label="Underpants" left="113"
mouse_opaque="true" name="checkbox_underpants" radio_style="false" mouse_opaque="true" name="checkbox_underpants" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-376" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-376" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Skirt" left="113" height="16" initial_value="false" label="Skirt" left="113"
mouse_opaque="true" name="checkbox_skirt" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_skirt" radio_style="false" width="100" />
<check_box bottom="-396" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-396" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Tattoo" left="113" height="16" initial_value="false" label="Tattoo" left="113"
mouse_opaque="true" name="checkbox_tattoo" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_tattoo" radio_style="false" width="100" />
<check_box bottom="-416" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-416" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Alpha" left="113" height="16" initial_value="false" label="Alpha" left="113"
mouse_opaque="true" name="checkbox_alpha" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_alpha" radio_style="false" width="100" />
<check_box bottom="-436" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-436" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Physics" left="113" height="16" initial_value="false" label="Physics" left="113"
mouse_opaque="true" name="checkbox_physics" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_physics" radio_style="false" width="100" />
<check_box bottom="-216" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-216" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Chest" left="213" height="16" initial_value="false" label="Chest" left="213"
mouse_opaque="true" name="checkbox_Chest" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Chest" radio_style="false" width="100" />
<check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="true" label="Skull" left="213" height="16" initial_value="true" label="Skull" left="213"
mouse_opaque="true" name="checkbox_Skull" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Skull" radio_style="false" width="100" />
<check_box bottom="-256" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-256" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Left Shoulder" left="213" height="16" initial_value="false" label="Left Shoulder" left="213"
mouse_opaque="true" name="checkbox_Left Shoulder" radio_style="false" mouse_opaque="true" name="checkbox_Left Shoulder" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-276" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-276" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Right Shoulder" left="213" height="16" initial_value="false" label="Right Shoulder" left="213"
mouse_opaque="true" name="checkbox_Right Shoulder" radio_style="false" mouse_opaque="true" name="checkbox_Right Shoulder" radio_style="false"
width="106" /> width="106" />
<check_box bottom="-296" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-296" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Left Hand" left="213" height="16" initial_value="false" label="Left Hand" left="213"
mouse_opaque="true" name="checkbox_Left Hand" radio_style="false" mouse_opaque="true" name="checkbox_Left Hand" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-316" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-316" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Right Hand" left="213" height="16" initial_value="false" label="Right Hand" left="213"
mouse_opaque="true" name="checkbox_Right Hand" radio_style="false" mouse_opaque="true" name="checkbox_Right Hand" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-336" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-336" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="true" label="Left Foot" left="213" height="16" initial_value="true" label="Left Foot" left="213"
mouse_opaque="true" name="checkbox_Left Foot" radio_style="false" mouse_opaque="true" name="checkbox_Left Foot" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-356" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-356" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="true" label="Right Foot" left="213" height="16" initial_value="true" label="Right Foot" left="213"
mouse_opaque="true" name="checkbox_Right Foot" radio_style="false" mouse_opaque="true" name="checkbox_Right Foot" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-376" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-376" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Spine" left="213" height="16" initial_value="false" label="Spine" left="213"
mouse_opaque="true" name="checkbox_Spine" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Spine" radio_style="false" width="100" />
<check_box bottom="-396" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-396" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Pelvis" left="213" height="16" initial_value="false" label="Pelvis" left="213"
mouse_opaque="true" name="checkbox_Pelvis" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Pelvis" radio_style="false" width="100" />
<check_box bottom="-416" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-416" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Mouth" left="213" height="16" initial_value="false" label="Mouth" left="213"
mouse_opaque="true" name="checkbox_Mouth" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Mouth" radio_style="false" width="100" />
<check_box bottom="-436" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-436" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Chin" left="213" height="16" initial_value="false" label="Chin" left="213"
mouse_opaque="true" name="checkbox_Chin" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Chin" radio_style="false" width="100" />
<check_box bottom="-456" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-456" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Left Ear" left="213" height="16" initial_value="false" label="Left Ear" left="213"
mouse_opaque="true" name="checkbox_Left Ear" radio_style="false" mouse_opaque="true" name="checkbox_Left Ear" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-216" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-216" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Right Ear" left="313" height="16" initial_value="false" label="Right Ear" left="313"
mouse_opaque="true" name="checkbox_Right Ear" radio_style="false" mouse_opaque="true" name="checkbox_Right Ear" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-236" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-236" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Left Eyeball" left="313" height="16" initial_value="false" label="Left Eyeball" left="313"
mouse_opaque="true" name="checkbox_Left Eyeball" radio_style="false" mouse_opaque="true" name="checkbox_Left Eyeball" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-256" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-256" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Right Eyeball" left="313" height="16" initial_value="false" label="Right Eyeball" left="313"
mouse_opaque="true" name="checkbox_Right Eyeball" radio_style="false" mouse_opaque="true" name="checkbox_Right Eyeball" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-276" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-276" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Nose" left="313" height="16" initial_value="false" label="Nose" left="313"
mouse_opaque="true" name="checkbox_Nose" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Nose" radio_style="false" width="100" />
<check_box bottom="-296" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-296" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="R Upper Arm" left="313" height="16" initial_value="false" label="R Upper Arm" left="313"
mouse_opaque="true" name="checkbox_R Upper Arm" radio_style="false" mouse_opaque="true" name="checkbox_R Upper Arm" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-316" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-316" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="R Forearm" left="313" height="16" initial_value="false" label="R Forearm" left="313"
mouse_opaque="true" name="checkbox_R Forearm" radio_style="false" mouse_opaque="true" name="checkbox_R Forearm" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-336" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-336" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="L Upper Arm" left="313" height="16" initial_value="false" label="L Upper Arm" left="313"
mouse_opaque="true" name="checkbox_L Upper Arm" radio_style="false" mouse_opaque="true" name="checkbox_L Upper Arm" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-356" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-356" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="L Forearm" left="313" height="16" initial_value="false" label="L Forearm" left="313"
mouse_opaque="true" name="checkbox_L Forearm" radio_style="false" mouse_opaque="true" name="checkbox_L Forearm" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-376" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-376" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Right Hip" left="313" height="16" initial_value="false" label="Right Hip" left="313"
mouse_opaque="true" name="checkbox_Right Hip" radio_style="false" mouse_opaque="true" name="checkbox_Right Hip" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-396" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-396" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="R Upper Leg" left="313" height="16" initial_value="false" label="R Upper Leg" left="313"
mouse_opaque="true" name="checkbox_R Upper Leg" radio_style="false" mouse_opaque="true" name="checkbox_R Upper Leg" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-416" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-416" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="true" label="R Lower Leg" left="313" height="16" initial_value="true" label="R Lower Leg" left="313"
mouse_opaque="true" name="checkbox_R Lower Leg" radio_style="false" mouse_opaque="true" name="checkbox_R Lower Leg" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-436" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-436" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Left Hip" left="313" height="16" initial_value="false" label="Left Hip" left="313"
mouse_opaque="true" name="checkbox_Left Hip" radio_style="false" mouse_opaque="true" name="checkbox_Left Hip" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-456" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-456" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="L Upper Leg" left="313" height="16" initial_value="false" label="L Upper Leg" left="313"
mouse_opaque="true" name="checkbox_L Upper Leg" radio_style="false" mouse_opaque="true" name="checkbox_L Upper Leg" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall" <check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="true" label="L Lower Leg" left="413" height="16" initial_value="true" label="L Lower Leg" left="413"
mouse_opaque="true" name="checkbox_L Lower Leg" radio_style="false" mouse_opaque="true" name="checkbox_L Lower Leg" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-236" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-236" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Stomach" left="413" height="16" initial_value="false" label="Stomach" left="413"
mouse_opaque="true" name="checkbox_Stomach" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Stomach" radio_style="false" width="100" />
<check_box bottom="-256" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-256" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Left Pec" left="413" height="16" initial_value="false" label="Left Pec" left="413"
mouse_opaque="true" name="checkbox_Left Pec" radio_style="false" mouse_opaque="true" name="checkbox_Left Pec" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-276" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-276" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Right Pec" left="413" height="16" initial_value="false" label="Right Pec" left="413"
mouse_opaque="true" name="checkbox_Right Pec" radio_style="false" mouse_opaque="true" name="checkbox_Right Pec" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-296" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-296" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Neck" left="413"
mouse_opaque="true" name="checkbox_Neck" radio_style="false"
width="100" />
<check_box bottom="-316" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Root" left="413"
mouse_opaque="true" name="checkbox_Root" radio_style="false"
width="100" />
<check_box bottom="-336" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Center 2" left="413" height="16" initial_value="false" label="Center 2" left="413"
mouse_opaque="true" name="checkbox_Center 2" radio_style="false" mouse_opaque="true" name="checkbox_Center 2" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-316" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-356" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Top Right" left="413" height="16" initial_value="false" label="Top Right" left="413"
mouse_opaque="true" name="checkbox_Top Right" radio_style="false" mouse_opaque="true" name="checkbox_Top Right" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-336" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-376" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Top" left="413" height="16" initial_value="false" label="Top" left="413"
mouse_opaque="true" name="checkbox_Top" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Top" radio_style="false" width="100" />
<check_box bottom="-356" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-396" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Top Left" left="413" height="16" initial_value="false" label="Top Left" left="413"
mouse_opaque="true" name="checkbox_Top Left" radio_style="false" mouse_opaque="true" name="checkbox_Top Left" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-376" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-416" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Center" left="413" height="16" initial_value="false" label="Center" left="413"
mouse_opaque="true" name="checkbox_Center" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Center" radio_style="false" width="100" />
<check_box bottom="-396" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-436" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Bottom Left" left="413" height="16" initial_value="false" label="Bottom Left" left="413"
mouse_opaque="true" name="checkbox_Bottom Left" radio_style="false" mouse_opaque="true" name="checkbox_Bottom Left" radio_style="false"
width="100" /> width="100" />
<check_box bottom="-416" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-456" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Bottom" left="413" height="16" initial_value="false" label="Bottom" left="413"
mouse_opaque="true" name="checkbox_Bottom" radio_style="false" width="100" /> mouse_opaque="true" name="checkbox_Bottom" radio_style="false" width="100" />
<check_box bottom="-436" enabled="false" follows="left|top" font="SansSerifSmall" <check_box bottom="-476" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Bottom Right" left="413" height="16" initial_value="false" label="Bottom Right" left="413"
mouse_opaque="true" name="checkbox_Bottom Right" radio_style="false" mouse_opaque="true" name="checkbox_Bottom Right" radio_style="false"
width="100" /> width="100" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-24" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-24" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerif" h_pad="0" halign="left" height="16" left="13" font="SansSerif" h_pad="0" halign="left" height="16" left="13"
mouse_opaque="true" name="Make New Outfit" v_pad="0" width="489"> mouse_opaque="true" name="Make New Outfit" v_pad="0" width="489">
Make New Outfit Make New Outfit
</text> </text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-102" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-102" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="70" left="13" font="SansSerifSmall" h_pad="0" halign="left" height="70" left="13"
mouse_opaque="true" mouse_opaque="true"
name="Outfits are folders that contain clothing and body parts. Drag an outfit folder onto your avatar to put it on. &quot;Make New Outfit&quot; makes a new folder and saves copies of the items you are now wearing into it." name="Outfits are folders that contain clothing and body parts. Drag an outfit folder onto your avatar to put it on. &quot;Make New Outfit&quot; makes a new folder and saves copies of the items you are now wearing into it."
v_pad="0" width="489"> v_pad="0" width="489">
Outfits are folders that contain clothing and body parts. Outfits are folders that contain clothing and body parts.
Drag an outfit folder onto your avatar to put it on. Drag an outfit folder onto your avatar to put it on.
&quot;Make New Outfit&quot; makes a new folder and saves copies of the items you are &quot;Make New Outfit&quot; makes a new folder and saves copies of the items you are
now wearing into it. now wearing into it.
</text> </text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-126" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-126" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerif" h_pad="0" halign="left" height="16" left="13" font="SansSerif" h_pad="0" halign="left" height="16" left="13"
mouse_opaque="true" name="Folder name:" v_pad="0" width="489"> mouse_opaque="true" name="Folder name:" v_pad="0" width="489">
Folder name: Folder name:
</text> </text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-174" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-174" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerif" h_pad="0" halign="left" height="16" left="13" font="SansSerif" h_pad="0" halign="left" height="16" left="13"
mouse_opaque="true" name="Items to include in outfit:" v_pad="0" mouse_opaque="true" name="Items to include in outfit:" v_pad="0"
width="489"> width="489">
Items to include in outfit: Items to include in outfit:
</text> </text>
<button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
label="Check All" left_delta="200" mouse_opaque="true" label="Check All" left_delta="200" mouse_opaque="true"
name="Check All" scale_image="true" width="82" /> name="Check All" scale_image="true" width="82" />
<button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
label="Uncheck All" left_delta="100" mouse_opaque="true" label="Uncheck All" left_delta="100" mouse_opaque="true"
name="Uncheck All" scale_image="true" width="82" /> name="Uncheck All" scale_image="true" width="82" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13" font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
mouse_opaque="true" name="Body Parts:" v_pad="0" width="100"> mouse_opaque="true" name="Body Parts:" v_pad="0" width="100">
Body Parts: Body Parts:
</text> </text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="113" font="SansSerifSmall" h_pad="0" halign="left" height="14" left="113"
mouse_opaque="true" name="Clothes:" v_pad="0" width="100"> mouse_opaque="true" name="Clothes:" v_pad="0" width="100">
Clothes: Clothes:
</text> </text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top" bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="213" font="SansSerifSmall" h_pad="0" halign="left" height="14" left="213"
mouse_opaque="true" name="Attachments:" v_pad="0" width="100"> mouse_opaque="true" name="Attachments:" v_pad="0" width="100">
Attachments: Attachments:
</text> </text>
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-150" <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-150"
enabled="true" follows="left|top" font="SansSerif" enabled="true" follows="left|top" font="SansSerif"
handle_edit_keys_directly="true" height="20" left="13" max_length="63" handle_edit_keys_directly="true" height="20" left="13" max_length="63"
mouse_opaque="true" name="name ed" select_all_on_focus_received="false" mouse_opaque="true" name="name ed" select_all_on_focus_received="false"
select_on_focus="false" width="489" spell_check="true"> select_on_focus="false" width="489" spell_check="true">
New Outfit New Outfit
</line_editor> </line_editor>
</floater> </floater>