master
Brad Payne (Vir Linden) 2010-06-16 15:29:41 -04:00
commit cc5beffdf4
8 changed files with 114 additions and 81 deletions

View File

@ -1644,7 +1644,7 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()
}
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
return focus_offset;
return focus_offset * agent_rot;
}
void LLAgentCamera::setupSitCamera()

View File

@ -201,7 +201,9 @@ void LLUpdateAppearanceOnDestroy::fire(const LLUUID& inv_item)
{
LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(inv_item);
const std::string item_name = item ? item->getName() : "ITEM NOT FOUND";
#ifndef LL_RELEASE_FOR_DOWNLOAD
llinfos << "callback fired [ name:" << item_name << " UUID:" << inv_item << " count:" << mFireCount << " ] " << llendl;
#endif
mFireCount++;
}

View File

@ -5184,12 +5184,12 @@ void LLRecentItemsFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
menuentry_vec_t disabled_items, items = getMenuItems();
items.erase(std::find(items.begin(), items.end(), std::string("New Folder")));
items.erase(std::find(items.begin(), items.end(), std::string("New Script")));
items.erase(std::find(items.begin(), items.end(), std::string("New Note")));
items.erase(std::find(items.begin(), items.end(), std::string("New Gesture")));
items.erase(std::find(items.begin(), items.end(), std::string("New Clothes")));
items.erase(std::find(items.begin(), items.end(), std::string("New Body Parts")));
items.erase(std::remove(items.begin(), items.end(), std::string("New Body Parts")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Clothes")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Note")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Gesture")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Script")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Folder")), items.end());
hide_context_entries(menu, items, disabled_items);
}

View File

@ -2447,7 +2447,9 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
}
LLUUID tid;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TransactionID, tid);
#ifndef LL_RELEASE_FOR_DOWNLOAD
llinfos << "Bulk inventory: " << tid << llendl;
#endif
update_map_t update;
cat_array_t folders;

View File

@ -308,7 +308,16 @@ void LLInventoryFetchItemsObserver::startFetch()
// assume it's agent inventory.
owner_id = gAgent.getID();
}
// Ignore categories since they're not items. We
// could also just add this to mComplete but not sure what the
// side-effects would be, so ignoring to be safe.
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if (cat)
{
continue;
}
// It's incomplete, so put it on the incomplete container, and
// pack this on the message.
mIncomplete.push_back(*it);

View File

@ -1038,7 +1038,7 @@ void LLPanelPlaces::showAddedLandmarkInfo(const uuid_vec_t& items)
++item_iter)
{
const LLUUID& item_id = (*item_iter);
if(!highlight_offered_item(item_id))
if(!highlight_offered_object(item_id))
{
continue;
}

View File

@ -702,7 +702,7 @@ static void highlight_inventory_items_in_panel(const std::vector<LLUUID>& items,
++item_iter)
{
const LLUUID& item_id = (*item_iter);
if(!highlight_offered_item(item_id))
if(!highlight_offered_object(item_id))
{
continue;
}
@ -753,6 +753,18 @@ public:
const std::string& from_name) :
LLInventoryFetchItemsObserver(object_id),
mFromName(from_name) {}
/*virtual*/ void startFetch()
{
for (uuid_vec_t::const_iterator it = mIDs.begin(); it < mIDs.end(); ++it)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if (cat)
{
mComplete.push_back((*it));
}
}
LLInventoryFetchItemsObserver::startFetch();
}
/*virtual*/ void done()
{
open_inventory_offer(mComplete, mFromName);
@ -1065,111 +1077,119 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
}
}
void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_name)
{
for (uuid_vec_t::const_iterator item_iter = items.begin();
item_iter != items.end();
++item_iter)
for (uuid_vec_t::const_iterator obj_iter = objects.begin();
obj_iter != objects.end();
++obj_iter)
{
const LLUUID& item_id = (*item_iter);
if(!highlight_offered_item(item_id))
const LLUUID& obj_id = (*obj_iter);
if(!highlight_offered_object(obj_id))
{
continue;
}
LLInventoryItem* item = gInventory.getItem(item_id);
llassert(item);
if (!item) {
const LLInventoryObject *obj = gInventory.getObject(obj_id);
if (!obj)
{
llwarns << "Cannot find object [ itemID:" << obj_id << " ] to open." << llendl;
continue;
}
////////////////////////////////////////////////////////////////////////////////
// Special handling for various types.
const LLAssetType::EType asset_type = item->getActualType();
if (check_offer_throttle(from_name, false)) // If we are throttled, don't display
const LLAssetType::EType asset_type = obj->getActualType();
// Either an inventory item or a category.
const LLInventoryItem* item = dynamic_cast<const LLInventoryItem*>(obj);
if (item)
{
LL_DEBUGS("Messaging") << "Highlighting inventory item: " << item->getUUID() << LL_ENDL;
// If we opened this ourselves, focus it
const BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
switch(asset_type)
////////////////////////////////////////////////////////////////////////////////
// Special handling for various types.
if (check_offer_throttle(from_name, false)) // If we are throttled, don't display
{
case LLAssetType::AT_NOTECARD:
{
LLFloaterReg::showInstance("preview_notecard", LLSD(item_id), take_focus);
break;
}
case LLAssetType::AT_LANDMARK:
{
LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
if ("inventory_handler" == from_name)
LL_DEBUGS("Messaging") << "Highlighting inventory item: " << item->getUUID() << LL_ENDL;
// If we opened this ourselves, focus it
const BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
switch(asset_type)
{
case LLAssetType::AT_NOTECARD:
{
//we have to filter inventory_handler messages to avoid notification displaying
LLSideTray::getInstance()->showPanel("panel_places",
LLSD().with("type", "landmark").with("id", item->getUUID()));
LLFloaterReg::showInstance("preview_notecard", LLSD(obj_id), take_focus);
break;
}
else if("group_offer" == from_name)
case LLAssetType::AT_LANDMARK:
{
// "group_offer" is passed by LLOpenTaskGroupOffer
// Notification about added landmark will be generated under the "from_name.empty()" called from LLOpenTaskOffer::done().
LLSD args;
args["type"] = "landmark";
args["id"] = item_id;
LLSideTray::getInstance()->showPanel("panel_places", args);
LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
if ("inventory_handler" == from_name)
{
//we have to filter inventory_handler messages to avoid notification displaying
LLSideTray::getInstance()->showPanel("panel_places",
LLSD().with("type", "landmark").with("id", item->getUUID()));
}
else if("group_offer" == from_name)
{
// "group_offer" is passed by LLOpenTaskGroupOffer
// Notification about added landmark will be generated under the "from_name.empty()" called from LLOpenTaskOffer::done().
LLSD args;
args["type"] = "landmark";
args["id"] = obj_id;
LLSideTray::getInstance()->showPanel("panel_places", args);
continue;
continue;
}
else if(from_name.empty())
{
// we receive a message from LLOpenTaskOffer, it mean that new landmark has been added.
LLSD args;
args["LANDMARK_NAME"] = item->getName();
args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
LLNotificationsUtil::add("LandmarkCreated", args);
}
}
else if(from_name.empty())
break;
case LLAssetType::AT_TEXTURE:
{
// we receive a message from LLOpenTaskOffer, it mean that new landmark has been added.
LLSD args;
args["LANDMARK_NAME"] = item->getName();
args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
LLNotificationsUtil::add("LandmarkCreated", args);
LLFloaterReg::showInstance("preview_texture", LLSD(obj_id), take_focus);
break;
}
case LLAssetType::AT_ANIMATION:
LLFloaterReg::showInstance("preview_anim", LLSD(obj_id), take_focus);
break;
case LLAssetType::AT_SCRIPT:
LLFloaterReg::showInstance("preview_script", LLSD(obj_id), take_focus);
break;
case LLAssetType::AT_SOUND:
LLFloaterReg::showInstance("preview_sound", LLSD(obj_id), take_focus);
break;
default:
break;
}
break;
case LLAssetType::AT_TEXTURE:
{
LLFloaterReg::showInstance("preview_texture", LLSD(item_id), take_focus);
break;
}
case LLAssetType::AT_ANIMATION:
LLFloaterReg::showInstance("preview_anim", LLSD(item_id), take_focus);
break;
case LLAssetType::AT_SCRIPT:
LLFloaterReg::showInstance("preview_script", LLSD(item_id), take_focus);
break;
case LLAssetType::AT_SOUND:
LLFloaterReg::showInstance("preview_sound", LLSD(item_id), take_focus);
break;
default:
break;
}
}
////////////////////////////////////////////////////////////////////////////////
// Highlight item if it's not in the trash, lost+found, or COF
const BOOL auto_open = gSavedSettings.getBOOL("ShowInInventory") &&
const BOOL auto_open =
gSavedSettings.getBOOL("ShowInInventory") &&
(asset_type != LLAssetType::AT_CALLINGCARD) &&
(item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
!(item && item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
!from_name.empty();
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
if(active_panel)
{
LL_DEBUGS("Messaging") << "Highlighting" << item_id << LL_ENDL;
LL_DEBUGS("Messaging") << "Highlighting" << obj_id << LL_ENDL;
LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
active_panel->setSelection(item_id, TAKE_FOCUS_NO);
active_panel->setSelection(obj_id, TAKE_FOCUS_NO);
gFocusMgr.setKeyboardFocus(focus_ctrl);
}
}
}
bool highlight_offered_item(const LLUUID& item_id)
bool highlight_offered_object(const LLUUID& obj_id)
{
LLInventoryItem* item = gInventory.getItem(item_id);
if(!item)
const LLInventoryObject* obj = gInventory.getObject(obj_id);
if(!obj)
{
LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
LL_WARNS("Messaging") << "Unable to show inventory item: " << obj_id << LL_ENDL;
return false;
}
@ -1178,7 +1198,7 @@ bool highlight_offered_item(const LLUUID& item_id)
// notification (e.g. trash, cof, lost-and-found).
if(!gAgent.getAFK())
{
const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(obj_id);
if (parent)
{
const LLFolderType::EType parent_type = parent->getPreferredType();

View File

@ -207,7 +207,7 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
// Returns true if item is not in certain "quiet" folder which don't need UI
// notification (e.g. trash, cof, lost-and-found) and agent is not AFK, false otherwise.
// Returns false if item is not found.
bool highlight_offered_item(const LLUUID& item_id);
bool highlight_offered_object(const LLUUID& obj_id);
void set_dad_inventory_item(LLInventoryItem* inv_item, const LLUUID& into_folder_uuid);