summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llappearancemgr.cpp55
-rw-r--r--indra/newview/llfolderview.cpp20
-rw-r--r--indra/newview/llfolderview.h1
-rw-r--r--indra/newview/llinventorybridge.cpp13
-rw-r--r--indra/newview/llinventoryobserver.h1
-rw-r--r--indra/newview/llinventorypanel.cpp24
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp53
-rw-r--r--indra/newview/llpaneloutfitsinventory.h19
-rw-r--r--indra/newview/llsidepanelappearance.cpp14
-rw-r--r--indra/newview/llsidepanelappearance.h2
-rw-r--r--indra/newview/llsidepanelinventorysubpanel.cpp4
-rw-r--r--indra/newview/llsidepaneliteminfo.cpp14
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp246
-rw-r--r--indra/newview/llsidepaneltaskinfo.h36
-rw-r--r--indra/newview/llviewermenu.cpp6
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml157
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_appearance.xml76
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml20
18 files changed, 429 insertions, 332 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index c06098689d..43b2f34ecd 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -455,7 +455,10 @@ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit
LLViewerInventoryItem *item = items.get(i);
if (keep_outfit_links && (item->getActualType() == LLAssetType::AT_LINK_FOLDER))
continue;
- gInventory.purgeObject(item->getUUID());
+ if (item->getIsLinkType())
+ {
+ gInventory.purgeObject(item->getUUID());
+ }
}
}
@@ -871,10 +874,48 @@ bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventor
(a->getWearableType() == b->getWearableType()));
}
+class LLDeferredCOFLinkObserver: public LLInventoryObserver
+{
+public:
+ LLDeferredCOFLinkObserver(const LLUUID& item_id, bool do_update):
+ mItemID(item_id),
+ mDoUpdate(do_update)
+ {
+ }
+
+ ~LLDeferredCOFLinkObserver()
+ {
+ }
+
+ /* virtual */ void changed(U32 mask)
+ {
+ const LLInventoryItem *item = gInventory.getItem(mItemID);
+ if (item)
+ {
+ gInventory.removeObserver(this);
+ LLAppearanceManager::instance().addCOFItemLink(item,mDoUpdate);
+ delete this;
+ }
+ }
+
+private:
+ const LLUUID mItemID;
+ bool mDoUpdate;
+};
+
+
void LLAppearanceManager::addCOFItemLink(const LLUUID &item_id, bool do_update )
{
const LLInventoryItem *item = gInventory.getItem(item_id);
- addCOFItemLink(item, do_update);
+ if (!item)
+ {
+ LLDeferredCOFLinkObserver *observer = new LLDeferredCOFLinkObserver(item_id, do_update);
+ gInventory.addObserver(observer);
+ }
+ else
+ {
+ addCOFItemLink(item, do_update);
+ }
}
void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_update )
@@ -909,7 +950,10 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up
else if (areMatchingWearables(vitem,inv_item))
{
gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);
- gInventory.purgeObject(inv_item->getUUID());
+ if (inv_item->getIsLinkType())
+ {
+ gInventory.purgeObject(inv_item->getUUID());
+ }
}
}
if (linked_already)
@@ -958,10 +1002,9 @@ void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_upda
for (S32 i=0; i<item_array.count(); i++)
{
const LLInventoryItem* item = item_array.get(i).get();
- if (item->getLinkedUUID() == item_id)
+ if (item->getIsLinkType() && item->getLinkedUUID() == item_id)
{
- const LLUUID& item_id = item_array.get(i)->getUUID();
- gInventory.purgeObject(item_id);
+ gInventory.purgeObject(item->getUUID());
}
}
if (do_update)
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 321982ceb6..adf7f08702 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -1939,6 +1939,26 @@ LLFolderViewItem* LLFolderView::getItemByID(const LLUUID& id)
return NULL;
}
+LLFolderViewFolder* LLFolderView::getFolderByID(const LLUUID& id)
+{
+ if (id.isNull())
+ {
+ return this;
+ }
+
+ for (folders_t::iterator iter = mFolders.begin();
+ iter != mFolders.end();
+ ++iter)
+ {
+ LLFolderViewFolder *folder = (*iter);
+ if (folder->getListener()->getUUID() == id)
+ {
+ return folder;
+ }
+ }
+ return NULL;
+}
+
bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
{
std::string action = userdata.asString();
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index d18ba385d8..2598af4df4 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -248,6 +248,7 @@ public:
void addItemID(const LLUUID& id, LLFolderViewItem* itemp);
void removeItemID(const LLUUID& id);
LLFolderViewItem* getItemByID(const LLUUID& id);
+ LLFolderViewFolder* getFolderByID(const LLUUID& id);
bool doToSelected(LLInventoryModel* model, const LLSD& userdata);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index e2f9663000..bacc685130 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -973,7 +973,7 @@ bool LLInvFVBridge::isInOutfitsSidePanel() const
dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
if (!outfit_panel)
return false;
- return outfit_panel->isAccordionPanel(my_panel);
+ return outfit_panel->isTabPanel(my_panel);
}
// +=================================================+
@@ -2496,7 +2496,10 @@ void LLFolderBridge::folderOptionsMenu()
checkFolderForContentsOfType(model, is_object) ||
checkFolderForContentsOfType(model, is_gesture) )
{
- mItems.push_back(std::string("Folder Wearables Separator"));
+ if (!is_sidepanel)
+ {
+ mItems.push_back(std::string("Folder Wearables Separator"));
+ }
// Only enable add/replace outfit for non-default folders.
if (!is_default_folder)
@@ -2902,6 +2905,9 @@ void saveItemsOrder(LLInventoryModel::item_array_t& items)
item->updateServer(FALSE);
gInventory.updateItem(item);
+
+ // Tell the parent folder to refresh its sort order.
+ gInventory.addChangedMask(LLInventoryObserver::SORT, item->getParentUUID());
}
gInventory.notifyObservers();
@@ -2998,8 +3004,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
}
const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
- const LLUUID& landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
- const BOOL folder_allows_reorder = ((mUUID == landmarks_id) || (mUUID == favorites_id));
+ const BOOL folder_allows_reorder = (mUUID == favorites_id);
// we can move item inside a folder only if this folder is Favorites. See EXT-719
accept = is_movable && ((mUUID != inv_item->getParentUUID()) || folder_allows_reorder);
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 99e6dbe3c8..c1f192e2bf 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -62,6 +62,7 @@ public:
STRUCTURE = 16, // structural change (eg item or folder moved)
CALLING_CARD = 32, // (eg online, grant status, cancel)
REBUILD = 64, // item UI changed (eg item type different)
+ SORT = 128, // folder needs to be resorted.
ALL = 0xffffffff
};
LLInventoryObserver();
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 92b9dc427f..3c34ba32e2 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -278,6 +278,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
const LLUUID& item_id = (*items_iter);
const LLInventoryObject* model_item = model->getObject(item_id);
LLFolderViewItem* view_item = mFolders->getItemByID(item_id);
+ LLFolderViewFolder* view_folder = mFolders->getFolderByID(item_id);
//////////////////////////////
// LABEL Operation
@@ -320,7 +321,18 @@ void LLInventoryPanel::modelChanged(U32 mask)
view_item->refresh();
}
}
-
+
+ //////////////////////////////
+ // SORT Operation
+ // Sort the folder.
+ if (mask & LLInventoryObserver::SORT)
+ {
+ if (view_folder)
+ {
+ view_folder->requestSort();
+ }
+ }
+
// We don't typically care which of these masks the item is actually flagged with, since the masks
// may not be accurate (e.g. in the main inventory panel, I move an item from My Inventory into
// Landmarks; this is a STRUCTURE change for that panel but is an ADD change for the Landmarks
@@ -385,16 +397,6 @@ void LLInventoryPanel::modelChanged(U32 mask)
}
}
}
-
- /* I don't think we need this code, but not positive -- Seraph
- if (!handled)
- {
- // It's a small change that only requires a refresh.
- // *TODO: figure out a more efficient way to do the refresh
- // since it is expensive on large inventories
- mFolders->refresh();
- }
- */
}
// static
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 4511bca23a..5b36a5406a 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -75,12 +75,12 @@ LLPanelOutfitsInventory::~LLPanelOutfitsInventory()
BOOL LLPanelOutfitsInventory::postBuild()
{
- initAccordionPanels();
+ initTabPanels();
initListCommandsHandlers();
return TRUE;
}
-void LLPanelOutfitsInventory::updateParent()
+void LLPanelOutfitsInventory::updateVerbs()
{
if (mParent)
{
@@ -127,7 +127,7 @@ void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)
mActivePanel->setFilterSubString(string);
}
-void LLPanelOutfitsInventory::onWear()
+void LLPanelOutfitsInventory::onWearButtonClick()
{
LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
if (listenerp)
@@ -167,7 +167,7 @@ void LLPanelOutfitsInventory::onNew()
void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
{
updateListCommands();
- updateParent();
+ updateVerbs();
if (getRootFolder()->needsAutoRename() && items.size())
{
getRootFolder()->startRenamingSelectedItem();
@@ -234,13 +234,14 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::onGearButtonClick, this));
mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this));
mListCommands->childSetAction("add_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this));
-
+ mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this));
+
LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this
- , _4 // BOOL drop
- , _5 // EDragAndDropType cargo_type
- , _7 // EAcceptance* accept
- ));
+ , _4 // BOOL drop
+ , _5 // EDragAndDropType cargo_type
+ , _7 // EAcceptance* accept
+ ));
mCommitCallbackRegistrar.add("panel_outfits_inventory_gear_default.Custom.Action",
boost::bind(&LLPanelOutfitsInventory::onCustomAction, this, _2));
@@ -252,8 +253,10 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
void LLPanelOutfitsInventory::updateListCommands()
{
bool trash_enabled = isActionEnabled("delete");
+ bool wear_enabled = isActionEnabled("wear");
mListCommands->childSetEnabled("trash_btn", trash_enabled);
+ mListCommands->childSetEnabled("wear_btn", wear_enabled);
}
void LLPanelOutfitsInventory::onGearButtonClick()
@@ -308,7 +311,7 @@ void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
}
if (command_name == "wear")
{
- onWear();
+ onWearButtonClick();
}
if (command_name == "add")
{
@@ -407,41 +410,41 @@ bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropTy
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
-// Accordion //
+// Tab panels //
-void LLPanelOutfitsInventory::initAccordionPanels()
+void LLPanelOutfitsInventory::initTabPanels()
{
- mAccordionPanels.resize(2);
+ mTabPanels.resize(2);
LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_accordionpanel");
myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, LLInventoryFilter::FILTERTYPE_CATEGORY);
myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mAccordionPanels[0] = myoutfits_panel;
+ mTabPanels[0] = myoutfits_panel;
mActivePanel = myoutfits_panel;
LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_accordionpanel");
cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mAccordionPanels[1] = cof_panel;
+ mTabPanels[1] = cof_panel;
- for (accordionpanels_vec_t::iterator iter = mAccordionPanels.begin();
- iter != mAccordionPanels.end();
+ for (tabpanels_vec_t::iterator iter = mTabPanels.begin();
+ iter != mTabPanels.end();
++iter)
{
LLInventoryPanel *panel = (*iter);
- panel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onAccordionSelectionChange, this, panel, _1, _2));
+ panel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onTabSelectionChange, this, panel, _1, _2));
}
}
-void LLPanelOutfitsInventory::onAccordionSelectionChange(LLInventoryPanel* accordion_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
{
if (user_action && items.size() > 0)
{
- for (accordionpanels_vec_t::iterator iter = mAccordionPanels.begin();
- iter != mAccordionPanels.end();
+ for (tabpanels_vec_t::iterator iter = mTabPanels.begin();
+ iter != mTabPanels.end();
++iter)
{
LLInventoryPanel *panel = (*iter);
- if (panel == accordion_panel)
+ if (panel == tab_panel)
{
mActivePanel = panel;
}
@@ -459,10 +462,10 @@ LLInventoryPanel* LLPanelOutfitsInventory::getActivePanel()
return mActivePanel;
}
-bool LLPanelOutfitsInventory::isAccordionPanel(LLInventoryPanel *panel)
+bool LLPanelOutfitsInventory::isTabPanel(LLInventoryPanel *panel)
{
- for(accordionpanels_vec_t::iterator it = mAccordionPanels.begin();
- it != mAccordionPanels.end();
+ for(tabpanels_vec_t::iterator it = mTabPanels.begin();
+ it != mTabPanels.end();
++it)
{
if (*it == panel)
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index afeaef485d..9b6b483e3b 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -54,7 +54,6 @@ public:
/*virtual*/ BOOL postBuild();
void onSearchEdit(const std::string& string);
- void onWear();
void onAdd();
void onRemove();
void onEdit();
@@ -71,29 +70,30 @@ public:
LLFolderView* getRootFolder();
protected:
- void updateParent();
+ void updateVerbs();
bool getIsCorrectType(const LLFolderViewEventListener *listenerp) const;
private:
LLSidepanelAppearance* mParent;
LLSaveFolderState* mSavedFolderState;
+
public:
//////////////////////////////////////////////////////////////////////////////////
- // Accordion //
+ // tab panels
LLInventoryPanel* getActivePanel();
- bool isAccordionPanel(LLInventoryPanel *panel);
+ bool isTabPanel(LLInventoryPanel *panel);
protected:
- void initAccordionPanels();
- void onAccordionSelectionChange(LLInventoryPanel* accordion_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+ void initTabPanels();
+ void onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action);
private:
LLInventoryPanel* mActivePanel;
- typedef std::vector<LLInventoryPanel *> accordionpanels_vec_t;
- accordionpanels_vec_t mAccordionPanels;
+ typedef std::vector<LLInventoryPanel *> tabpanels_vec_t;
+ tabpanels_vec_t mTabPanels;
- // Accordion //
+ // tab panels //
////////////////////////////////////////////////////////////////////////////////
@@ -103,6 +103,7 @@ protected:
void initListCommandsHandlers();
void updateListCommands();
void onGearButtonClick();
+ void onWearButtonClick();
void onAddButtonClick();
void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
void onTrashButtonClick();
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index eb3695a371..30b0075c4b 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -113,9 +113,6 @@ BOOL LLSidepanelAppearance::postBuild()
mEditAppearanceBtn = getChild<LLButton>("editappearance_btn");
mEditAppearanceBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditAppearanceButtonClicked, this));
- mWearBtn = getChild<LLButton>("wear_btn");
- mWearBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onWearButtonClicked, this));
-
mEditBtn = getChild<LLButton>("edit_btn");
mEditBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditButtonClicked, this));
@@ -199,14 +196,6 @@ void LLSidepanelAppearance::onFilterEdit(const std::string& search_string)
}
}
-void LLSidepanelAppearance::onWearButtonClicked()
-{
- if (!mLookInfo->getVisible())
- {
- mPanelOutfitsInventory->onWear();
- }
-}
-
void LLSidepanelAppearance::onOpenOutfitButtonClicked()
{
const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink();
@@ -284,7 +273,6 @@ void LLSidepanelAppearance::toggleLookInfoPanel(BOOL visible)
mLookInfo->setVisible(visible);
mPanelOutfitsInventory->setVisible(!visible);
mFilterEditor->setVisible(!visible);
- mWearBtn->setVisible(!visible);
mEditBtn->setVisible(!visible);
mNewOutfitBtn->setVisible(!visible);
mCurrOutfitPanel->setVisible(!visible);
@@ -314,12 +302,10 @@ void LLSidepanelAppearance::updateVerbs()
{
const bool is_correct_type = (mPanelOutfitsInventory->getCorrectListenerForAction() != NULL);
mEditBtn->setEnabled(is_correct_type);
- mWearBtn->setEnabled(is_correct_type);
}
else
{
mEditBtn->setEnabled(FALSE);
- mWearBtn->setEnabled(FALSE);
}
}
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index 9c870f631a..8ef2088eda 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -67,7 +67,6 @@ private:
void onOpenOutfitButtonClicked();
void onEditAppearanceButtonClicked();
- void onWearButtonClicked();
void onEditButtonClicked();
void onNewOutfitButtonClicked();
void onBackButtonClicked();
@@ -82,7 +81,6 @@ private:
LLButton* mOpenOutfitBtn;
LLButton* mEditAppearanceBtn;
- LLButton* mWearBtn;
LLButton* mEditBtn;
LLButton* mNewOutfitBtn;
LLPanel* mCurrOutfitPanel;
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
index 793904faa8..56e342c3ce 100644
--- a/indra/newview/llsidepanelinventorysubpanel.cpp
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -95,7 +95,9 @@ void LLSidepanelInventorySubpanel::setIsEditing(BOOL edit)
BOOL LLSidepanelInventorySubpanel::getIsEditing() const
{
- return mIsEditing;
+
+ return TRUE; // Default everything to edit mode since we're not using an edit button anymore.
+ // return mIsEditing;
}
void LLSidepanelInventorySubpanel::reset()
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 25518d87d6..1965e634b6 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -172,7 +172,7 @@ void LLSidepanelItemInfo::refresh()
}
}
- if (!getIsEditing())
+ if (!getIsEditing() || !item)
{
const std::string no_item_names[]={
"LabelItemName",
@@ -261,18 +261,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
GP_OBJECT_MANIPULATE)
&& is_obj_modify && is_complete;
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- bool item_in_trash = item->getUUID() == trash_id || gInventory.isObjectDescendentOf(item->getUUID(), trash_id);
-
- if (is_modifiable && !item_in_trash)
- {
- setIsEditing(TRUE);
- }
- else
- {
- setIsEditing(FALSE);
- }
-
childSetEnabled("LabelItemNameTitle",TRUE);
childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
childSetText("LabelItemName",item->getName());
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 2c40e948de..50cec3184d 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -101,13 +101,25 @@ BOOL LLSidepanelTaskInfo::postBuild()
mBuyBtn = getChild<LLButton>("buy_btn");
mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this));
- childSetPrevalidate("Object Name",LLLineEditor::prevalidateASCIIPrintableNoPipe);
- childSetPrevalidate("Object Description",LLLineEditor::prevalidateASCIIPrintableNoPipe);
-
mLabelGroupName = getChild<LLNameBox>("Group Name Proxy");
- childSetCommitCallback("checkbox for sale",onClickForSale,this);
-
+ childSetCommitCallback("Object Name", LLSidepanelTaskInfo::onCommitName,this);
+ childSetPrevalidate("Object Name", LLLineEditor::prevalidateASCIIPrintableNoPipe);
+ childSetCommitCallback("Object Description", LLSidepanelTaskInfo::onCommitDesc,this);
+ childSetPrevalidate("Object Description", LLLineEditor::prevalidateASCIIPrintableNoPipe);
+ getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this));
+ childSetCommitCallback("checkbox share with group", &LLSidepanelTaskInfo::onCommitGroupShare,this);
+ childSetAction("button deed", &LLSidepanelTaskInfo::onClickDeedToGroup,this);
+ childSetCommitCallback("checkbox allow everyone move", &LLSidepanelTaskInfo::onCommitEveryoneMove,this);
+ childSetCommitCallback("checkbox allow everyone copy", &LLSidepanelTaskInfo::onCommitEveryoneCopy,this);
+ childSetCommitCallback("checkbox for sale", &LLSidepanelTaskInfo::onCommitSaleInfo,this);
+ childSetCommitCallback("sale type", &LLSidepanelTaskInfo::onCommitSaleType,this);
+ childSetCommitCallback("Edit Cost", &LLSidepanelTaskInfo::onCommitSaleInfo, this);
+ childSetCommitCallback("checkbox next owner can modify", &LLSidepanelTaskInfo::onCommitNextOwnerModify,this);
+ childSetCommitCallback("checkbox next owner can copy", &LLSidepanelTaskInfo::onCommitNextOwnerCopy,this);
+ childSetCommitCallback("checkbox next owner can transfer", &LLSidepanelTaskInfo::onCommitNextOwnerTransfer,this);
+ childSetCommitCallback("clickaction", &LLSidepanelTaskInfo::onCommitClickAction,this);
+ childSetCommitCallback("search_check", &LLSidepanelTaskInfo::onCommitIncludeInSearch,this);
return TRUE;
}
@@ -860,7 +872,7 @@ static bool callback_deed_to_group(const LLSD& notification, const LLSD& respons
return FALSE;
}
-void LLSidepanelTaskInfo::onClickDeedToGroup()
+void LLSidepanelTaskInfo::onClickDeedToGroup(void *data)
{
LLNotificationsUtil::add("DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group);
}
@@ -869,121 +881,149 @@ void LLSidepanelTaskInfo::onClickDeedToGroup()
/// Permissions checkboxes
///----------------------------------------------------------------------------
-void LLSidepanelTaskInfo::onCommitPerm(LLCheckBoxCtrl *ctrl, U8 field, U32 perm)
+// static
+void LLSidepanelTaskInfo::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm)
{
- const LLViewerObject* object = mObjectSelection->getFirstRootObject();
- if (!object) return;
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
+ if(!object) return;
- BOOL new_state = ctrl->get();
+ // Checkbox will have toggled itself
+ // LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+ LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
+ BOOL new_state = check->get();
+
LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm);
}
-void LLSidepanelTaskInfo::onCommitGroupShare()
+// static
+void LLSidepanelTaskInfo::onCommitGroupShare(LLUICtrl *ctrl, void *data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox share with group");
- onCommitPerm(ctrl, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY);
+ onCommitPerm(ctrl, data, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY);
}
-void LLSidepanelTaskInfo::onCommitEveryoneMove()
+// static
+void LLSidepanelTaskInfo::onCommitEveryoneMove(LLUICtrl *ctrl, void *data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone move");
- onCommitPerm(ctrl, PERM_EVERYONE, PERM_MOVE);
+ onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_MOVE);
}
-void LLSidepanelTaskInfo::onCommitEveryoneCopy()
+// static
+void LLSidepanelTaskInfo::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone copy");
- onCommitPerm(ctrl, PERM_EVERYONE, PERM_COPY);
+ onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_COPY);
}
-void LLSidepanelTaskInfo::onCommitNextOwnerModify()
+// static
+void LLSidepanelTaskInfo::onCommitNextOwnerModify(LLUICtrl* ctrl, void* data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can modify");
- onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_MODIFY);
+ //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerModify" << llendl;
+ onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_MODIFY);
}
-void LLSidepanelTaskInfo::onCommitNextOwnerCopy()
+// static
+void LLSidepanelTaskInfo::onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can copy");
- onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_COPY);
+ //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerCopy" << llendl;
+ onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_COPY);
}
-void LLSidepanelTaskInfo::onCommitNextOwnerTransfer()
+// static
+void LLSidepanelTaskInfo::onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can transfer");
- onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_TRANSFER);
+ //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerTransfer" << llendl;
+ onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_TRANSFER);
}
-void LLSidepanelTaskInfo::onCommitName()
+// static
+void LLSidepanelTaskInfo::onCommitName(LLUICtrl*, void* data)
{
- LLLineEditor* tb = getChild<LLLineEditor>("Object Name");
- LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
+ //llinfos << "LLSidepanelTaskInfo::onCommitName()" << llendl;
+ LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+ LLLineEditor* tb = self->getChild<LLLineEditor>("Object Name");
+ if(tb)
+ {
+ LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
+// LLSelectMgr::getInstance()->selectionSetObjectName(self->mLabelObjectName->getText());
+ }
}
-void LLSidepanelTaskInfo::onCommitDesc()
+
+// static
+void LLSidepanelTaskInfo::onCommitDesc(LLUICtrl*, void* data)
{
- LLLineEditor* le = getChild<LLLineEditor>("Object Description");
- LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
+ //llinfos << "LLSidepanelTaskInfo::onCommitDesc()" << llendl;
+ LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+ LLLineEditor* le = self->getChild<LLLineEditor>("Object Description");
+ if(le)
+ {
+ LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
+ }
}
-void LLSidepanelTaskInfo::onCommitSaleInfo()
+// static
+void LLSidepanelTaskInfo::onCommitSaleInfo(LLUICtrl*, void* data)
{
- setAllSaleInfo();
+ LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+ self->setAllSaleInfo();
}
-void LLSidepanelTaskInfo::onCommitSaleType()
+// static
+void LLSidepanelTaskInfo::onCommitSaleType(LLUICtrl*, void* data)
{
- setAllSaleInfo();
+ LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
+ self->setAllSaleInfo();
}
+
void LLSidepanelTaskInfo::setAllSaleInfo()
{
- llinfos << "LLSidepanelTaskInfo::setAllSaleInfo()" << llendl;
-
LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT;
+
LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
+
// Set the sale type if the object(s) are for sale.
- if (checkPurchase && checkPurchase->get())
+ if(checkPurchase && checkPurchase->get())
{
sale_type = static_cast<LLSaleInfo::EForSale>(getChild<LLComboBox>("sale type")->getValue().asInteger());
}
S32 price = -1;
- const LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
+
+ LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
price = (edit_price->getTentative()) ? DEFAULT_PRICE : edit_price->getValue().asInteger();
+
// If somehow an invalid price, turn the sale off.
if (price < 0)
sale_type = LLSaleInfo::FS_NOT;
- LLSaleInfo sale_info(sale_type, price);
- LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info);
- // If turned off for-sale, make sure click-action buy is turned
- // off as well
- if (sale_type == LLSaleInfo::FS_NOT)
- {
- U8 click_action = 0;
- LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
- if (click_action == CLICK_ACTION_BUY)
- {
- LLSelectMgr::getInstance()->selectionSetClickAction(CLICK_ACTION_TOUCH);
- }
- }
-}
+ LLSaleInfo old_sale_info;
+ LLSelectMgr::getInstance()->selectGetSaleInfo(old_sale_info);
-// static
-void LLSidepanelTaskInfo::onClickForSale(LLUICtrl* ctrl, void* data)
-{
- LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
- self->updateUIFromSaleInfo();
-}
+ LLSaleInfo new_sale_info(sale_type, price);
+ LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(new_sale_info);
+
+ U8 old_click_action = 0;
+ LLSelectMgr::getInstance()->selectionGetClickAction(&old_click_action);
-void LLSidepanelTaskInfo::updateUIFromSaleInfo()
-{
- /*
- TODO: Update sale button enable/disable state and default
- sale button settings when this sale button is enabled/disabled.
- */
+ if (old_sale_info.isForSale()
+ && !new_sale_info.isForSale()
+ && old_click_action == CLICK_ACTION_BUY)
+ {
+ // If turned off for-sale, make sure click-action buy is turned
+ // off as well
+ LLSelectMgr::getInstance()->
+ selectionSetClickAction(CLICK_ACTION_TOUCH);
+ }
+ else if (new_sale_info.isForSale()
+ && !old_sale_info.isForSale()
+ && old_click_action == CLICK_ACTION_TOUCH)
+ {
+ // If just turning on for-sale, preemptively turn on one-click buy
+ // unless user have a different click action set
+ LLSelectMgr::getInstance()->
+ selectionSetClickAction(CLICK_ACTION_BUY);
+ }
}
struct LLSelectionPayable : public LLSelectedObjectFunctor
@@ -997,8 +1037,35 @@ struct LLSelectionPayable : public LLSelectedObjectFunctor
}
};
+static U8 string_value_to_click_action(std::string p_value)
+{
+ if (p_value == "Touch")
+ return CLICK_ACTION_TOUCH;
+ if (p_value == "Sit")
+ return CLICK_ACTION_SIT;
+ if (p_value == "Buy")
+ return CLICK_ACTION_BUY;
+ if (p_value == "Pay")
+ return CLICK_ACTION_PAY;
+ if (p_value == "Open")
+ return CLICK_ACTION_OPEN;
+ if (p_value == "Zoom")
+ return CLICK_ACTION_ZOOM;
+ return CLICK_ACTION_TOUCH;
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
+{
+ LLComboBox* box = (LLComboBox*)ctrl;
+ if (!box) return;
+ std::string value = box->getValue().asString();
+ U8 click_action = string_value_to_click_action(value);
+ doClickAction(click_action);
+}
+
// static
-void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action)
+void LLSidepanelTaskInfo::doClickAction(U8 click_action)
{
if (click_action == CLICK_ACTION_BUY)
{
@@ -1020,7 +1087,7 @@ void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action)
{
// Verify object has script with money() handler
LLSelectionPayable payable;
- const BOOL can_pay = mObjectSelection->applyToObjects(&payable);
+ bool can_pay = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&payable);
if (!can_pay)
{
// Warn, but do it anyway.
@@ -1031,10 +1098,11 @@ void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action)
}
// static
-void LLSidepanelTaskInfo::onCommitIncludeInSearch()
+void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void* data)
{
- LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("search_check");
- LLSelectMgr::getInstance()->selectionSetIncludeInSearch(ctrl->get());
+ LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl;
+ llassert(box);
+ LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get());
}
// virtual
@@ -1042,13 +1110,15 @@ void LLSidepanelTaskInfo::updateVerbs()
{
LLSidepanelInventorySubpanel::updateVerbs();
+ /*
mOpenBtn->setVisible(!getIsEditing());
mPayBtn->setVisible(!getIsEditing());
mBuyBtn->setVisible(!getIsEditing());
-
- mOpenBtn->setEnabled(enable_object_open());
//const LLViewerObject *obj = getFirstSelectedObject();
//mEditBtn->setEnabled(obj && obj->permModify());
+ */
+
+ mOpenBtn->setEnabled(enable_object_open());
}
void LLSidepanelTaskInfo::onOpenButtonClicked()
@@ -1061,28 +1131,28 @@ void LLSidepanelTaskInfo::onOpenButtonClicked()
void LLSidepanelTaskInfo::onPayButtonClicked()
{
- onCommitClickAction(CLICK_ACTION_PAY);
+ doClickAction(CLICK_ACTION_PAY);
}
void LLSidepanelTaskInfo::onBuyButtonClicked()
{
- onCommitClickAction(CLICK_ACTION_BUY);
+ doClickAction(CLICK_ACTION_BUY);
}
// virtual
void LLSidepanelTaskInfo::save()
{
- onCommitGroupShare();
- onCommitEveryoneMove();
- onCommitEveryoneCopy();
- onCommitNextOwnerModify();
- onCommitNextOwnerCopy();
- onCommitNextOwnerTransfer();
- onCommitName();
- onCommitDesc();
- onCommitSaleInfo();
- onCommitSaleType();
- onCommitIncludeInSearch();
+ onCommitGroupShare(getChild<LLCheckBoxCtrl>("checkbox share with group"), this);
+ onCommitEveryoneMove(getChild<LLCheckBoxCtrl>("checkbox allow everyone move"), this);
+ onCommitEveryoneCopy(getChild<LLCheckBoxCtrl>("checkbox allow everyone copy"), this);
+ onCommitNextOwnerModify(getChild<LLCheckBoxCtrl>("checkbox next owner can modify"), this);
+ onCommitNextOwnerCopy(getChild<LLCheckBoxCtrl>("checkbox next owner can copy"), this);
+ onCommitNextOwnerTransfer(getChild<LLCheckBoxCtrl>("checkbox next owner can transfer"), this);
+ onCommitName(getChild<LLLineEditor>("Object Name"), this);
+ onCommitDesc(getChild<LLLineEditor>("Object Description"), this);
+ onCommitSaleInfo(NULL, this);
+ onCommitSaleType(NULL, this);
+ onCommitIncludeInSearch(getChild<LLCheckBoxCtrl>("search_check"), this);
}
void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection)
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
index 7c6d9983ae..cf36c20767 100644
--- a/indra/newview/llsidepaneltaskinfo.h
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -72,28 +72,30 @@ protected:
static void onClickRelease(void*);
void onClickGroup();
void cbGroupID(LLUUID group_id);
+ static void onClickDeedToGroup(void*);
- void onClickDeedToGroup();
- void onCommitPerm(LLCheckBoxCtrl* ctrl, U8 field, U32 perm);
- void onCommitGroupShare();
- void onCommitEveryoneMove();
- void onCommitEveryoneCopy();
- void onCommitNextOwnerModify();
- void onCommitNextOwnerCopy();
- void onCommitNextOwnerTransfer();
- void onCommitName();
- void onCommitDesc();
- void onCommitSaleInfo();
- void onCommitSaleType();
-
- void onCommitClickAction(U8 click_action);
- void onCommitIncludeInSearch();
+ static void onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm);
+ static void onCommitGroupShare(LLUICtrl *ctrl, void *data);
+
+ static void onCommitEveryoneMove(LLUICtrl *ctrl, void *data);
+ static void onCommitEveryoneCopy(LLUICtrl *ctrl, void *data);
+
+ static void onCommitNextOwnerModify(LLUICtrl* ctrl, void* data);
+ static void onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data);
+ static void onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data);
+
+ static void onCommitName(LLUICtrl* ctrl, void* data);
+ static void onCommitDesc(LLUICtrl* ctrl, void* data);
+
+ static void onCommitSaleInfo(LLUICtrl* ctrl, void* data);
+ static void onCommitSaleType(LLUICtrl* ctrl, void* data);
void setAllSaleInfo();
- static void onClickForSale(LLUICtrl* ctrl, void *data);
- void updateUIFromSaleInfo();
+ static void onCommitClickAction(LLUICtrl* ctrl, void* data);
+ static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*);
+ static void doClickAction(U8 click_action);
void disableAll();
private:
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 0be0b56bc3..dfa775c292 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2529,8 +2529,6 @@ void handle_object_edit()
void handle_object_inspect()
{
- // Disable sidepanel inspector
- /*
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
LLViewerObject* selected_objectp = selection->getFirstRootObject();
if (selected_objectp)
@@ -2539,9 +2537,11 @@ void handle_object_inspect()
key["task"] = "task";
LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
}
- */
+ /*
+ // Old floater properties
LLFloaterReg::showInstance("inspect", LLSD());
+ */
}
//---------------------------------------------------------------------------
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index db95d01b43..ab73f135b9 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -1,61 +1,104 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="Outfits"
- height="510"
- width="333"
- follows="top|left"
- left="0"
- top_pad="0">
- <accordion
- single_expansion="true"
- height="510"
- layout="topleft"
- left="0"
- follows="top|left"
- name="outfits_accordion"
- top_pad="0"
- width="333">
- <accordion_tab
- expanded="false"
- layout="topleft"
- name="tab_cof"
- title="Current Outfit">
- <inventory_panel
+
+ <panel name="Outfits"
+ background_visible="true"
+ follows="all"
+ height="550"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ width="330"
+ border="false">
+ <tab_container
+ follows="all"
+ height="500"
+ layout="topleft"
+ left="10"
+ name="appearance_tabs"
+ tab_min_width="100"
+ tab_height="30"
+ tab_position="top"
+ halign="center"
+ width="313">
+ <inventory_panel
+ label="MY OUTFITS"
+ help_topic="my_outfits_tab"
allow_multi_select="true"
+ follows="all"
border="false"
- height="460"
- left="0"
- top="0"
- mouse_opaque="true"
- name="cof_accordionpanel"
- start_folder="Current Outfit" />
- </accordion_tab>
- <accordion_tab
- expanded="true"
- layout="topleft"
- name="tab_outfits"
- title="My Outfits">
- <inventory_panel
- allow_multi_select="true"
- border="false"
- follows="all"
- left="0"
- top="0"
- height="460"
- mouse_opaque="true"
- name="outfitslist_accordionpanel"
- start_folder="My Outfits" />
- </accordion_tab>
- </accordion>
- <!--<button bottom="0"
- halign="center"
- height="23"
- label=">"
- enabled="false"
- mouse_opaque="false"
- name="selector"
- width="20"
- left="0"
- visible="false"
- follows="right|bottom"
- tool_tip="View outfit properties" />-->
+ left="0"
+ top="0"
+ height="500"
+ width="290"
+ mouse_opaque="true"
+ name="outfitslist_accordionpanel"
+ start_folder="My Outfits" />
+ <inventory_panel
+ label="WEARING"
+ help_topic="now_wearing_tab"
+ allow_multi_select="true"
+ border="false"
+ height="500"
+ width="290"
+ left="0"
+ top="0"
+ mouse_opaque="true"
+ name="cof_accordionpanel"
+ start_folder="Current Outfit" />
+ </tab_container>
+ <panel
+ background_visible="true"
+ follows="bottom|left"
+ height="50"
+ layout="topleft"
+ left="0"
+ visible="true"
+ name="bottom_panel"
+ top_pad="10"
+ width="313">
+ <button
+ follows="bottom|left"
+ tool_tip="Show additional options"
+ height="18"
+ image_disabled="OptionsMenu_Disabled"
+ image_selected="OptionsMenu_Press"
+ image_unselected="OptionsMenu_Off"
+ layout="topleft"
+ left="10"
+ name="options_gear_btn"
+ top="6"
+ width="18" />
+ <button
+ follows="bottom|left"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left_pad="5"
+ name="add_btn"
+ tool_tip="Add new item"
+ width="18" />
+ <dnd_button
+ follows="bottom|left"
+ height="18"
+ image_selected="TrashItem_Press"
+ image_unselected="TrashItem_Off"
+ layout="topleft"
+ right="-5"
+ name="trash_btn"
+ tool_tip="Remove selected item"
+ top="6"
+ width="18" />
+ <button
+ follows="top|left"
+ height="23"
+ label="Wear"
+ layout="topleft"
+ name="wear_btn"
+ right="-5"
+ top_pad="0"
+ width="90" />
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index 3dac1a9614..27f19d44fa 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -85,72 +85,21 @@ left="0"
class="panel_outfits_inventory"
filename="panel_outfits_inventory.xml"
name="panel_outfits_inventory"
- height="510"
+ height="550"
min_height="510"
width="333"
top_pad="0"
- follows="top|left"
+ follows="all"
/>
- <panel
- visible="true"
- name="bottom_panel"
- height="50"
- left="0"
- top_pad="3"
- follows="bottom|left"
- width="333">
- <button
- follows="bottom|left"
- tool_tip="Show additional options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
- layout="topleft"
- left="10"
- name="options_gear_btn"
- top="6"
- width="18" />
- <button
- follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
- layout="topleft"
- left_pad="5"
- name="newlook_btn"
- tool_tip="Add new outfit"
- width="18" />
- <dnd_button
- follows="bottom|left"
- height="18"
- image_selected="TrashItem_Press"
- image_unselected="TrashItem_Off"
- layout="topleft"
- right="-5"
- name="trash_btn"
- tool_tip="Remove selected item"
- top="6"
- width="18" />
- <button
- follows="bottom|left"
- height="23"
- label="Wear"
- layout="topleft"
- name="wear_btn"
- right="-5"
- top_pad="0"
- width="90" />
- </panel>
- <!-- <button
- follows="bottom|left"
- height="23"
- label="New outfit"
- layout="topleft"
- left_pad="5"
- right="-10"
- width="100" />-->
+ <!-- <button
+ follows="bottom|left"
+ height="23"
+ label="New outfit"
+ layout="topleft"
+ left_pad="5"
+ right="-10"
+ name="newlook_btn"
+ width="100" />-->
<panel
class="panel_look_info"
filename="panel_look_info.xml"
@@ -167,4 +116,5 @@ left="0"
left="0"
name="panel_edit_wearable"
visible="false" />
-</panel> \ No newline at end of file
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index eff2ca1fcd..5b379b54e3 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -487,7 +487,7 @@
height="25"
label="Open"
layout="topleft"
- left_pad="5"
+ left="5"
name="open_btn"
top="0"
width="60" />
@@ -509,23 +509,5 @@
name="buy_btn"
top="0"
width="60" />
- <button
- follows="bottom|right"
- height="25"
- label="Cancel"
- layout="topleft"
- name="cancel_btn"
- right="-1"
- top="0"
- width="70" />
- <button
- follows="bottom|right"
- height="25"
- label="Save"
- layout="topleft"
- name="save_btn"
- left_pad="-135"
- top="0"
- width="60" />
</panel>
</panel> \ No newline at end of file