Working on (EXT-4347) Moving object contents to inventory opens files, changes menu.
- Removing LLPanelPlaces dependency from open_inventory_offer handler. - Added landmark offer handling to Places panel. --HG-- branch : product-enginemeow-7.2.2
parent
5fc508bbc2
commit
e367c41298
|
|
@ -70,6 +70,7 @@
|
|||
#include "lltoggleablemenu.h"
|
||||
#include "llviewerinventory.h"
|
||||
#include "llviewermenu.h"
|
||||
#include "llviewermessage.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewerwindow.h"
|
||||
|
|
@ -105,22 +106,35 @@ private:
|
|||
LLPanelPlaces* mPlaces;
|
||||
};
|
||||
|
||||
class LLPlacesInventoryObserver : public LLInventoryObserver
|
||||
class LLPlacesInventoryObserver : public LLInventoryAddedObserver
|
||||
{
|
||||
public:
|
||||
LLPlacesInventoryObserver(LLPanelPlaces* places_panel) :
|
||||
LLInventoryObserver(),
|
||||
mPlaces(places_panel)
|
||||
mPlaces(places_panel),
|
||||
mTabsCreated(false)
|
||||
{}
|
||||
|
||||
/*virtual*/ void changed(U32 mask)
|
||||
{
|
||||
if (mPlaces)
|
||||
mPlaces->changedInventory(mask);
|
||||
LLInventoryAddedObserver::changed(mask);
|
||||
|
||||
if (!mTabsCreated && mPlaces)
|
||||
{
|
||||
mPlaces->createTabs();
|
||||
mTabsCreated = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
/*virtual*/ void done()
|
||||
{
|
||||
mPlaces->showAddedLandmarkInfo(mAdded);
|
||||
mAdded.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
LLPanelPlaces* mPlaces;
|
||||
bool mTabsCreated;
|
||||
};
|
||||
|
||||
class LLPlacesRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
|
||||
|
|
@ -943,7 +957,7 @@ void LLPanelPlaces::changedParcelSelection()
|
|||
updateVerbs();
|
||||
}
|
||||
|
||||
void LLPanelPlaces::changedInventory(U32 mask)
|
||||
void LLPanelPlaces::createTabs()
|
||||
{
|
||||
if (!(gInventory.isInventoryUsable() && LLTeleportHistory::getInstance()))
|
||||
return;
|
||||
|
|
@ -979,10 +993,6 @@ void LLPanelPlaces::changedInventory(U32 mask)
|
|||
// Filter applied to show all items.
|
||||
if (mActivePanel)
|
||||
mActivePanel->onSearchEdit(mActivePanel->getFilterSubString());
|
||||
|
||||
// we don't need to monitor inventory changes anymore,
|
||||
// so remove the observer
|
||||
gInventory.removeObserver(mInventoryObserver);
|
||||
}
|
||||
|
||||
void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos)
|
||||
|
|
@ -991,6 +1001,33 @@ void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos)
|
|||
updateVerbs();
|
||||
}
|
||||
|
||||
void LLPanelPlaces::showAddedLandmarkInfo(const std::vector<LLUUID>& items)
|
||||
{
|
||||
for (std::vector<LLUUID>::const_iterator item_iter = items.begin();
|
||||
item_iter != items.end();
|
||||
++item_iter)
|
||||
{
|
||||
const LLUUID& item_id = (*item_iter);
|
||||
if(!highlight_offered_item(item_id))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
LLInventoryItem* item = gInventory.getItem(item_id);
|
||||
|
||||
if (LLAssetType::AT_LANDMARK == item->getType())
|
||||
{
|
||||
// Created landmark is passed to Places panel to allow its editing.
|
||||
// If the panel is closed we don't reopen it until created landmark is loaded.
|
||||
if("create_landmark" == getPlaceInfoType() && !getItem())
|
||||
{
|
||||
setItem(item);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPlaces::updateVerbs()
|
||||
{
|
||||
bool is_place_info_visible;
|
||||
|
|
|
|||
|
|
@ -66,11 +66,15 @@ public:
|
|||
|
||||
// Called on parcel selection change to update place information.
|
||||
void changedParcelSelection();
|
||||
// Called on agent inventory change to find out when inventory gets usable.
|
||||
void changedInventory(U32 mask);
|
||||
// Called once on agent inventory first change to find out when inventory gets usable
|
||||
// and to create "My Landmarks" and "Teleport History" tabs.
|
||||
void createTabs();
|
||||
// Called when we receive the global 3D position of a parcel.
|
||||
void changedGlobalPos(const LLVector3d &global_pos);
|
||||
|
||||
// Opens landmark info panel when agent creates or receives landmark.
|
||||
void showAddedLandmarkInfo(const std::vector<LLUUID>& items);
|
||||
|
||||
void setItem(LLInventoryItem* item);
|
||||
|
||||
LLInventoryItem* getItem() { return mItem; }
|
||||
|
|
|
|||
|
|
@ -860,28 +860,12 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
|
|||
++item_iter)
|
||||
{
|
||||
const LLUUID& item_id = (*item_iter);
|
||||
LLInventoryItem* item = gInventory.getItem(item_id);
|
||||
if(!item)
|
||||
if(!highlight_offered_item(item_id))
|
||||
{
|
||||
LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
|
||||
continue;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Don't highlight if it's in certain "quiet" folders which don't need UI
|
||||
// notification (e.g. trash, cof, lost-and-found).
|
||||
if(!gAgent.getAFK())
|
||||
{
|
||||
const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
|
||||
if (parent)
|
||||
{
|
||||
const LLFolderType::EType parent_type = parent->getPreferredType();
|
||||
if (LLViewerFolderType::lookupIsQuietType(parent_type))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
LLInventoryItem* item = gInventory.getItem(item_id);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Special handling for various types.
|
||||
|
|
@ -928,10 +912,11 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
|
|||
LLPanelPlaces *places_panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->getPanel("panel_places"));
|
||||
if (places_panel)
|
||||
{
|
||||
// we are creating a landmark
|
||||
// Landmark creation handling is moved to LLPanelPlaces::showAddedLandmarkInfo()
|
||||
// TODO* LLPanelPlaces dependency is going to be removed. See EXT-4347.
|
||||
if("create_landmark" == places_panel->getPlaceInfoType() && !places_panel->getItem())
|
||||
{
|
||||
places_panel->setItem(item);
|
||||
//places_panel->setItem(item);
|
||||
}
|
||||
// we are opening a group notice attachment
|
||||
else
|
||||
|
|
@ -981,6 +966,34 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
|
|||
}
|
||||
}
|
||||
|
||||
bool highlight_offered_item(const LLUUID& item_id)
|
||||
{
|
||||
LLInventoryItem* item = gInventory.getItem(item_id);
|
||||
if(!item)
|
||||
{
|
||||
LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Don't highlight if it's in certain "quiet" folders which don't need UI
|
||||
// notification (e.g. trash, cof, lost-and-found).
|
||||
if(!gAgent.getAFK())
|
||||
{
|
||||
const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
|
||||
if (parent)
|
||||
{
|
||||
const LLFolderType::EType parent_type = parent->getPreferredType();
|
||||
if (LLViewerFolderType::lookupIsQuietType(parent_type))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void inventory_offer_mute_callback(const LLUUID& blocked_id,
|
||||
const std::string& first_name,
|
||||
const std::string& last_name,
|
||||
|
|
|
|||
|
|
@ -203,6 +203,11 @@ void process_initiate_download(LLMessageSystem* msg, void**);
|
|||
void start_new_inventory_observer();
|
||||
void open_inventory_offer(const std::vector<LLUUID>& 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);
|
||||
|
||||
struct LLOfferInfo
|
||||
{
|
||||
LLOfferInfo()
|
||||
|
|
|
|||
Loading…
Reference in New Issue