Merge branch 'V2MultiWear' of git://github.com/Shyotl/SingularityViewer into V2MultiWear
This commit is contained in:
@@ -502,6 +502,16 @@ LLUICtrl* LLUICtrl::getParentUICtrl() const
|
||||
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
|
||||
void LLUICtrl::setTentative(BOOL b)
|
||||
{
|
||||
|
||||
@@ -133,6 +133,9 @@ public:
|
||||
|
||||
void setCommitCallback( void (*cb)(LLUICtrl*, void*) ) { mCommitCallback = 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);
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "llvoavatarself.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llwearablelist.h"
|
||||
#include "llinventorypanel.h"
|
||||
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a)
|
||||
#include "rlvhandler.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.
|
||||
void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
|
||||
LLPointer<LLInventoryCallback> cb)
|
||||
void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb)
|
||||
{
|
||||
LLInventoryModel::cat_array_t* cats;
|
||||
LLInventoryModel::item_array_t* items;
|
||||
gInventory.getDirectDescendentsOf(src_id, cats, items);
|
||||
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();
|
||||
iter != items->end();
|
||||
++iter)
|
||||
@@ -1274,13 +1279,25 @@ void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LL
|
||||
case LLAssetType::AT_BODYPART:
|
||||
case LLAssetType::AT_GESTURE:
|
||||
{
|
||||
llinfos << "copying inventory item " << item->getName() << llendl;
|
||||
copy_inventory_item(gAgent.getID(),
|
||||
item->getPermissions().getOwner(),
|
||||
item->getUUID(),
|
||||
dst_id,
|
||||
item->getName(),
|
||||
cb);
|
||||
if(!item->getPermissions().allowCopyBy(gAgent.getID()))
|
||||
{
|
||||
link_inventory_item(gAgent.getID(),
|
||||
item->getUUID(),
|
||||
dst_id,
|
||||
item->getName(),
|
||||
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;
|
||||
}
|
||||
default:
|
||||
@@ -2892,11 +2909,39 @@ void LLAppearanceMgr::updateClothingOrderingInfo(LLUUID cat_id, bool update_base
|
||||
|
||||
|
||||
|
||||
|
||||
class LLShowCreatedOutfit: public LLInventoryCallback
|
||||
class LLScrollOnFirstItem : public LLInventoryCallback
|
||||
{
|
||||
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()
|
||||
@@ -2929,10 +2974,7 @@ public:
|
||||
LLAppearanceMgr::getInstance()->updatePanelOutfitName("");
|
||||
}
|
||||
|
||||
virtual void fire(const LLUUID&)
|
||||
{}
|
||||
|
||||
private:
|
||||
protected:
|
||||
LLUUID mFolderID;
|
||||
bool mShowPanel;
|
||||
};
|
||||
@@ -2961,6 +3003,299 @@ LLUUID LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, b
|
||||
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()
|
||||
{
|
||||
const LLUUID& base_outfit_id = getBaseOutfitUUID();
|
||||
|
||||
@@ -80,6 +80,8 @@ public:
|
||||
void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
|
||||
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.
|
||||
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, 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);
|
||||
|
||||
|
||||
@@ -241,11 +241,18 @@ public:
|
||||
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();
|
||||
|
||||
}
|
||||
}*/
|
||||
virtual void draw()
|
||||
{
|
||||
BOOL one_or_more_items_selected = FALSE;
|
||||
@@ -269,7 +276,7 @@ public:
|
||||
{
|
||||
LLWearableType::EType wtType = (LLWearableType::EType)wearable;
|
||||
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);
|
||||
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;
|
||||
BOOL checked = childGetValue(name).asBoolean();
|
||||
if (i < LLWearableType::WT_COUNT )
|
||||
LLViewerInventoryItem* item = (*iter);
|
||||
if(!item)
|
||||
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
|
||||
{
|
||||
if( checked )
|
||||
LLViewerJointAttachment* attachment = gAgentAvatarp->getWornAttachmentPoint(item->getLinkedUUID());
|
||||
if(attachment && childGetValue(std::string("checkbox_")+attachment->getName()).asBoolean())
|
||||
{
|
||||
S32 attachment_pt = mCheckBoxList[i].second;
|
||||
attachments_to_include.put( attachment_pt );
|
||||
item_list.push_back(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -350,7 +364,7 @@ public:
|
||||
|
||||
void refresh()
|
||||
{
|
||||
BOOL fUseOutfits = gSavedSettings.getBOOL("UseOutfitFolders");
|
||||
BOOL fUseOutfits = getUseOutfits();
|
||||
|
||||
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++ )
|
||||
{
|
||||
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
|
||||
if (gAgent.isTeen()
|
||||
&& !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> 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
|
||||
//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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1599,7 +1599,7 @@ LLPanelAvatar::~LLPanelAvatar()
|
||||
|
||||
BOOL LLPanelAvatar::canClose()
|
||||
{
|
||||
return mPanelClassified && mPanelClassified->canClose();
|
||||
return !mPanelClassified || mPanelClassified->canClose();
|
||||
}
|
||||
|
||||
void LLPanelAvatar::setAvatar(LLViewerObject *avatarp)
|
||||
@@ -1645,6 +1645,7 @@ void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status)
|
||||
online_status = ONLINE_STATUS_YES;
|
||||
}
|
||||
|
||||
if(mPanelSecondLife)
|
||||
mPanelSecondLife->childSetVisible("online_yes", online_status == ONLINE_STATUS_YES);
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
mPanelSecondLife->enableControls(own_avatar && mAllowEdit);
|
||||
mPanelWeb->enableControls(own_avatar && mAllowEdit);
|
||||
mPanelAdvanced->enableControls(own_avatar && mAllowEdit);
|
||||
if (mPanelSecondLife) mPanelSecondLife->enableControls(own_avatar && mAllowEdit);
|
||||
if (mPanelWeb) mPanelWeb->enableControls(own_avatar && mAllowEdit);
|
||||
if (mPanelAdvanced) mPanelAdvanced->enableControls(own_avatar && mAllowEdit);
|
||||
// Teens don't have this.
|
||||
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
|
||||
// old data.
|
||||
mPanelSecondLife->clearControls();
|
||||
if(mPanelSecondLife) mPanelSecondLife->clearControls();
|
||||
|
||||
mPanelPicks->deletePickPanels();
|
||||
mPanelPicks->setDataRequested(false);
|
||||
if(mPanelPicks) mPanelPicks->deletePickPanels();
|
||||
if(mPanelPicks) mPanelPicks->setDataRequested(false);
|
||||
|
||||
mPanelClassified->deleteClassifiedPanels();
|
||||
mPanelClassified->setDataRequested(false);
|
||||
if(mPanelClassified) mPanelClassified->deleteClassifiedPanels();
|
||||
if(mPanelClassified) mPanelClassified->setDataRequested(false);
|
||||
|
||||
mPanelNotes->clearControls();
|
||||
mPanelNotes->setDataRequested(false);
|
||||
if(mPanelNotes) mPanelNotes->clearControls();
|
||||
if(mPanelNotes) mPanelNotes->setDataRequested(false);
|
||||
mHaveNotes = false;
|
||||
mLastNotes.clear();
|
||||
|
||||
|
||||
@@ -146,7 +146,10 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgentAvatarp->updateRegion(regionp);
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
gAgentAvatarp->updateRegion(regionp);
|
||||
}
|
||||
}
|
||||
res = gAgentAvatarp;
|
||||
}
|
||||
|
||||
@@ -3,280 +3,288 @@
|
||||
can_minimize="false" can_resize="false" can_tear_off="true" enabled="true"
|
||||
height="530" left="278" min_height="100" min_width="100"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Shape" radio_style="false" width="100" />
|
||||
<check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
mouse_opaque="true" name="checkbox_shape" radio_style="false" width="100" />
|
||||
<check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
height="16" initial_value="false" label="Skin" left="13"
|
||||
mouse_opaque="true" name="checkbox_Skin" radio_style="false" width="100" />
|
||||
<check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
mouse_opaque="true" name="checkbox_skin" radio_style="false" width="100" />
|
||||
<check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
height="16" initial_value="false" label="Hair" left="13"
|
||||
mouse_opaque="true" name="checkbox_Hair" radio_style="false" width="100" />
|
||||
<check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
mouse_opaque="true" name="checkbox_hair" radio_style="false" width="100" />
|
||||
<check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
height="16" initial_value="false" label="Eyes" left="13"
|
||||
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"
|
||||
bottom="90" drop_shadow_visible="true" enabled="true" follows="left|top"
|
||||
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"
|
||||
bottom="75" drop_shadow_visible="true" enabled="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
|
||||
mouse_opaque="true" name="Options:" v_pad="0" width="100">
|
||||
Options:
|
||||
</text>
|
||||
<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
Options:
|
||||
</text>
|
||||
<!--<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" radio_style="false" />
|
||||
<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 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="Shirt" left="113"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_undershirt" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_underpants" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Left Shoulder" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Right Shoulder" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Left Hand" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Right Hand" 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="true" label="Left Foot" left="213"
|
||||
mouse_opaque="true" name="checkbox_Left Foot" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Right Foot" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Left Ear" 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="Right Ear" left="313"
|
||||
mouse_opaque="true" name="checkbox_Right Ear" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Left Eyeball" 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="Right Eyeball" left="313"
|
||||
mouse_opaque="true" name="checkbox_Right Eyeball" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_R Upper Arm" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_R Forearm" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_L Upper Arm" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_L Forearm" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Right Hip" 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="R Upper Leg" left="313"
|
||||
mouse_opaque="true" name="checkbox_R Upper Leg" 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="true" label="R Lower Leg" left="313"
|
||||
mouse_opaque="true" name="checkbox_R Lower Leg" 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="Left Hip" left="313"
|
||||
mouse_opaque="true" name="checkbox_Left Hip" 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="L Upper Leg" left="313"
|
||||
mouse_opaque="true" name="checkbox_L Upper Leg" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_L Lower Leg" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Left Pec" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Right Pec" 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="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"
|
||||
mouse_opaque="true" name="checkbox_Center 2" radio_style="false"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Top Right" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Top Left" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Bottom Left" radio_style="false"
|
||||
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"
|
||||
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"
|
||||
mouse_opaque="true" name="checkbox_Bottom Right" 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="-24" drop_shadow_visible="true" enabled="true" follows="left|top"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16" left="13"
|
||||
mouse_opaque="true" name="Make New Outfit" v_pad="0" width="489">
|
||||
Make New Outfit
|
||||
</text>
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
Make New Outfit
|
||||
</text>
|
||||
<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"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="70" left="13"
|
||||
mouse_opaque="true"
|
||||
name="Outfits are folders that contain clothing and body parts. Drag an outfit folder onto your avatar to put it on. "Make New Outfit" makes a new folder and saves copies of the items you are now wearing into it."
|
||||
v_pad="0" width="489">
|
||||
Outfits are folders that contain clothing and body parts.
|
||||
Drag an outfit folder onto your avatar to put it on.
|
||||
|
||||
"Make New Outfit" makes a new folder and saves copies of the items you are
|
||||
now wearing into it.
|
||||
</text>
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
Outfits are folders that contain clothing and body parts.
|
||||
Drag an outfit folder onto your avatar to put it on.
|
||||
|
||||
"Make New Outfit" makes a new folder and saves copies of the items you are
|
||||
now wearing into it.
|
||||
</text>
|
||||
<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"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16" left="13"
|
||||
mouse_opaque="true" name="Folder name:" v_pad="0" width="489">
|
||||
Folder name:
|
||||
</text>
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
Folder name:
|
||||
</text>
|
||||
<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"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16" left="13"
|
||||
mouse_opaque="true" name="Items to include in outfit:" v_pad="0"
|
||||
width="489">
|
||||
Items to include in outfit:
|
||||
</text>
|
||||
Items to include in outfit:
|
||||
</text>
|
||||
<button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
|
||||
label="Check All" left_delta="200" mouse_opaque="true"
|
||||
name="Check All" scale_image="true" width="82" />
|
||||
<button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
|
||||
label="Uncheck All" left_delta="100" mouse_opaque="true"
|
||||
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"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
|
||||
mouse_opaque="true" name="Body Parts:" v_pad="0" width="100">
|
||||
Body Parts:
|
||||
</text>
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
Body Parts:
|
||||
</text>
|
||||
<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"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="113"
|
||||
mouse_opaque="true" name="Clothes:" v_pad="0" width="100">
|
||||
Clothes:
|
||||
</text>
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
Clothes:
|
||||
</text>
|
||||
<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"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="213"
|
||||
mouse_opaque="true" name="Attachments:" v_pad="0" width="100">
|
||||
Attachments:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-150"
|
||||
Attachments:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-150"
|
||||
enabled="true" follows="left|top" font="SansSerif"
|
||||
handle_edit_keys_directly="true" height="20" left="13" max_length="63"
|
||||
mouse_opaque="true" name="name ed" select_all_on_focus_received="false"
|
||||
select_on_focus="false" width="489" spell_check="true">
|
||||
New Outfit
|
||||
</line_editor>
|
||||
New Outfit
|
||||
</line_editor>
|
||||
</floater>
|
||||
|
||||
Reference in New Issue
Block a user