EXT-7734 FIX In-world object properteis often don't show correct information

reviewed by Leyla
meow-7.2.2
Richard Nelson 2010-06-16 17:32:51 -07:00
parent 353fc2431a
commit 4aef5f54de
7 changed files with 86 additions and 67 deletions

View File

@ -327,6 +327,11 @@ BOOL get_is_category_renameable(const LLInventoryModel* model, const LLUUID& id)
return FALSE;
}
void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id)
{
LLSideTray::getInstance()->showPanel("sidepanel_inventory", LLSD().with("id", item_uuid).with("object", object_id));
}
void show_item_profile(const LLUUID& item_uuid)
{
LLUUID linked_uuid = gInventory.getLinkedItemID(item_uuid);

View File

@ -53,6 +53,7 @@ BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id);
BOOL get_is_category_renameable(const LLInventoryModel* model, const LLUUID& id);
void show_item_profile(const LLUUID& item_uuid);
void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id);
void show_item_original(const LLUUID& item_uuid);

View File

@ -176,17 +176,7 @@ LLInventoryItem* LLTaskInvFVBridge::findItem() const
void LLTaskInvFVBridge::showProperties()
{
show_item_profile(mUUID);
// Disable old properties floater; this is replaced by the sidepanel.
/*
LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
if (floater)
{
floater->setObjectID(mPanel->getTaskUUID());
}
*/
show_task_item_profile(mUUID, mPanel->getTaskUUID());
}
struct LLBuyInvItemData

View File

@ -257,7 +257,6 @@ public:
LLObjectSelection();
void updateEffects();
void cleanupNodes();
BOOL isEmpty() const;
@ -281,11 +280,6 @@ public:
template <typename T> bool getSelectedTEValue(LLSelectedTEGetFunctor<T>* func, T& res);
template <typename T> bool isMultipleTEValue(LLSelectedTEGetFunctor<T>* func, const T& ignore_value);
void addNode(LLSelectNode *nodep);
void addNodeAtEnd(LLSelectNode *nodep);
void moveNodeToFront(LLSelectNode *nodep);
void removeNode(LLSelectNode *nodep);
void deleteAllNodes(); // Delete all nodes
S32 getNumNodes();
LLSelectNode* findNode(LLViewerObject* objectp);
@ -312,6 +306,15 @@ public:
ESelectType getSelectType() const { return mSelectType; }
private:
void addNode(LLSelectNode *nodep);
void addNodeAtEnd(LLSelectNode *nodep);
void moveNodeToFront(LLSelectNode *nodep);
void removeNode(LLSelectNode *nodep);
void deleteAllNodes();
void cleanupNodes();
private:
list_t mList;
const LLObjectSelection &operator=(const LLObjectSelection &);

View File

@ -80,6 +80,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_t
LLSidepanelTaskInfo::LLSidepanelTaskInfo()
{
setMouseOpaque(FALSE);
LLSelectMgr::instance().mUpdateSignal.connect(boost::bind(&LLSidepanelTaskInfo::refreshAll, this));
}
@ -271,7 +272,6 @@ void LLSidepanelTaskInfo::refresh()
// BUG: fails if a root and non-root are both single-selected.
const BOOL is_perm_modify = (mObjectSelection->getFirstRootNode() && LLSelectMgr::getInstance()->selectGetRootsModify()) ||
LLSelectMgr::getInstance()->selectGetModify();
const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus();
S32 string_index = 0;
std::string MODIFY_INFO_STRINGS[] =
@ -365,14 +365,14 @@ void LLSidepanelTaskInfo::refresh()
if (is_one_object)
{
if (keyboard_focus_view != LineEditorObjectName)
if (!LineEditorObjectName->hasFocus())
{
childSetText("Object Name",nodep->mName);
}
if (LineEditorObjectDesc)
{
if (keyboard_focus_view != LineEditorObjectDesc)
if (!LineEditorObjectDesc->hasFocus())
{
LineEditorObjectDesc->setText(nodep->mDescription);
}
@ -1178,9 +1178,30 @@ void LLSidepanelTaskInfo::save()
onCommitIncludeInSearch(getChild<LLCheckBoxCtrl>("search_check"), this);
}
// removes keyboard focus so that all fields can be updated
// and then restored focus
void LLSidepanelTaskInfo::refreshAll()
{
// update UI as soon as we have an object
// but remove keyboard focus first so fields are free to update
LLFocusableElement* focus = NULL;
if (hasFocus())
{
focus = gFocusMgr.getKeyboardFocus();
setFocus(FALSE);
}
refresh();
if (focus)
{
focus->setFocus(TRUE);
}
}
void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection)
{
mObjectSelection = selection;
refreshAll();
}
LLSidepanelTaskInfo* LLSidepanelTaskInfo::getActivePanel()

View File

@ -67,6 +67,8 @@ protected:
/*virtual*/ void save();
/*virtual*/ void updateVerbs();
void refreshAll(); // ignore current keyboard focus and update all fields
// statics
static void onClickClaim(void*);
static void onClickRelease(void*);
@ -120,7 +122,7 @@ protected:
LLViewerObject* getObject();
private:
LLViewerObject* mObject;
LLObjectSelectionHandle mObjectSelection;
LLObjectSelectionHandle mObjectSelection;
static LLSidepanelTaskInfo* sActivePanel;
};

View File

@ -159,51 +159,49 @@
name="LabelCreatorName"
top_delta="6"
width="140">
Nicole Linden
</text>
<button
follows="top|right"
height="16"
image_selected="Inspector_I"
image_unselected="Inspector_I"
layout="topleft"
right="-5"
name="BtnCreator"
top_delta="-6"
width="16" />
<text
type="string"
length="1"
follows="left|top"
height="23"
layout="topleft"
left="5"
name="LabelOwnerTitle"
top_pad="10"
width="78">
Owner:
</text>
<avatar_icon
follows="top|left"
height="20"
default_icon_name="Generic_Person"
layout="topleft"
left_pad="0"
top_delta="-6"
mouse_opaque="true"
width="20" />
<text
type="string"
follows="left|right|top"
font="SansSerifSmall"
height="15"
layout="topleft"
left_pad="5"
name="LabelOwnerName"
top_delta="6"
width="140">
Thrax Linden
</text>
</text>
<button
follows="top|right"
height="16"
image_selected="Inspector_I"
image_unselected="Inspector_I"
layout="topleft"
right="-5"
name="BtnCreator"
top_delta="-6"
width="16" />
<text
type="string"
length="1"
follows="left|top"
height="23"
layout="topleft"
left="5"
name="LabelOwnerTitle"
top_pad="10"
width="78">
Owner:
</text>
<avatar_icon
follows="top|left"
height="20"
default_icon_name="Generic_Person"
layout="topleft"
left_pad="0"
top_delta="-6"
mouse_opaque="true"
width="20" />
<text
type="string"
follows="left|right|top"
font="SansSerifSmall"
height="15"
layout="topleft"
left_pad="5"
name="LabelOwnerName"
top_delta="6"
width="140">
</text>
<button
follows="top|right"
height="16"
@ -236,7 +234,6 @@ top_pad="10"
name="LabelAcquiredDate"
top_delta="0"
width="222">
Wed May 24 12:50:46 2006
</text>
<panel
border="false"