Skip to content
Snippets Groups Projects
Commit ab199473 authored by Sergei Litovchuk's avatar Sergei Litovchuk
Browse files

STORM-148 FIXED Added updating Item Profile info upon changes of objects inventory items.

The 'Item Profile' panel was observing changes in agent's inventory only, so when an item inside an object was renamed its name wasn't updated in 'Item Profile' panel.
parent 1dbcc3ff
No related branches found
No related tags found
No related merge requests found
...@@ -75,7 +75,40 @@ void LLItemPropertiesObserver::changed(U32 mask) ...@@ -75,7 +75,40 @@ void LLItemPropertiesObserver::changed(U32 mask)
} }
} }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLObjectInventoryObserver
//
// Helper class to watch for changes in an object inventory.
// Used to update item properties in LLSidepanelItemInfo.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLObjectInventoryObserver : public LLVOInventoryListener
{
public:
LLObjectInventoryObserver(LLSidepanelItemInfo* floater, LLViewerObject* object)
: mFloater(floater)
{
registerVOInventoryListener(object, NULL);
}
virtual ~LLObjectInventoryObserver()
{
removeVOInventoryListener();
}
/*virtual*/ void inventoryChanged(LLViewerObject* object,
LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void* user_data);
private:
LLSidepanelItemInfo* mFloater;
};
/*virtual*/
void LLObjectInventoryObserver::inventoryChanged(LLViewerObject* object,
LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void* user_data)
{
mFloater->dirty();
}
///---------------------------------------------------------------------------- ///----------------------------------------------------------------------------
/// Class LLSidepanelItemInfo /// Class LLSidepanelItemInfo
...@@ -86,6 +119,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_i ...@@ -86,6 +119,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_i
// Default constructor // Default constructor
LLSidepanelItemInfo::LLSidepanelItemInfo() LLSidepanelItemInfo::LLSidepanelItemInfo()
: mItemID(LLUUID::null) : mItemID(LLUUID::null)
, mObjectInventoryObserver(NULL)
{ {
mPropertiesObserver = new LLItemPropertiesObserver(this); mPropertiesObserver = new LLItemPropertiesObserver(this);
...@@ -97,6 +131,8 @@ LLSidepanelItemInfo::~LLSidepanelItemInfo() ...@@ -97,6 +131,8 @@ LLSidepanelItemInfo::~LLSidepanelItemInfo()
{ {
delete mPropertiesObserver; delete mPropertiesObserver;
mPropertiesObserver = NULL; mPropertiesObserver = NULL;
stopObjectInventoryObserver();
} }
// virtual // virtual
...@@ -134,6 +170,10 @@ BOOL LLSidepanelItemInfo::postBuild() ...@@ -134,6 +170,10 @@ BOOL LLSidepanelItemInfo::postBuild()
void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id) void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id)
{ {
mObjectID = object_id; mObjectID = object_id;
// Start monitoring changes in the object inventory to update
// selected inventory item properties in Item Profile panel. See STORM-148.
startObjectInventoryObserver();
} }
void LLSidepanelItemInfo::setItemID(const LLUUID& item_id) void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
...@@ -147,6 +187,8 @@ void LLSidepanelItemInfo::reset() ...@@ -147,6 +187,8 @@ void LLSidepanelItemInfo::reset()
mObjectID = LLUUID::null; mObjectID = LLUUID::null;
mItemID = LLUUID::null; mItemID = LLUUID::null;
stopObjectInventoryObserver();
} }
void LLSidepanelItemInfo::refresh() void LLSidepanelItemInfo::refresh()
...@@ -600,6 +642,33 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) ...@@ -600,6 +642,33 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
} }
} }
void LLSidepanelItemInfo::startObjectInventoryObserver()
{
if (!mObjectInventoryObserver)
{
stopObjectInventoryObserver();
// Previous object observer should be removed before starting to observe a new object.
llassert(mObjectInventoryObserver == NULL);
}
if (mObjectID.isNull())
{
llwarns << "Empty object id passed to inventory observer" << llendl;
return;
}
LLViewerObject* object = gObjectList.findObject(mObjectID);
mObjectInventoryObserver = new LLObjectInventoryObserver(this, object);
}
void LLSidepanelItemInfo::stopObjectInventoryObserver()
{
delete mObjectInventoryObserver;
mObjectInventoryObserver = NULL;
}
void LLSidepanelItemInfo::onClickCreator() void LLSidepanelItemInfo::onClickCreator()
{ {
LLViewerInventoryItem* item = findItem(); LLViewerInventoryItem* item = findItem();
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
class LLButton; class LLButton;
class LLViewerInventoryItem; class LLViewerInventoryItem;
class LLItemPropertiesObserver; class LLItemPropertiesObserver;
class LLObjectInventoryObserver;
class LLViewerObject; class LLViewerObject;
class LLPermissions; class LLPermissions;
...@@ -63,9 +64,13 @@ class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel ...@@ -63,9 +64,13 @@ class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
void refreshFromItem(LLViewerInventoryItem* item); void refreshFromItem(LLViewerInventoryItem* item);
private: private:
void startObjectInventoryObserver();
void stopObjectInventoryObserver();
LLUUID mItemID; // inventory UUID for the inventory item. LLUUID mItemID; // inventory UUID for the inventory item.
LLUUID mObjectID; // in-world task UUID, or null if in agent inventory. LLUUID mObjectID; // in-world task UUID, or null if in agent inventory.
LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item
LLObjectInventoryObserver* mObjectInventoryObserver; // for syncing changes to items inside an object
// //
// UI Elements // UI Elements
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment